如何在django RetrieveUpdateDestroyAPIView中设置模型字段的自定义值?



我有这个RetrieveUpdateDestroyAPIView类在我的api视图和更新它不会自动更新数据字段命名为发布。我想在发送PUT请求时手动更新。我怎么能做到呢?下面是代码

models.py

from django.db import models
from django.contrib.auth.models import User
from django.utils import timezone

class Category(models.Model):
name = models.CharField(max_length=100)
def __str__(self):
return self.name

class Post(models.Model):
class PostObjects(models.Manager):
def get_queryset(self):
return super().get_queryset().filter(status='published')
options = (
('published', 'Published'),
('draft', 'Draft')
)
category = models.ForeignKey(Category, on_delete=models.PROTECT, default=1)
title = models.CharField(max_length=100)
excerpt = models.TextField(null=True)
content = models.TextField()
slug = models.SlugField(max_length=250, unique_for_date=True)
published = models.DateField(null=True, default=timezone.now)
author = models.ForeignKey(
User, on_delete=models.CASCADE, related_name='blog_posts', default=1)
status = models.CharField(
max_length=10, choices=options, default='published')
objects = models.Manager()
postobjects = PostObjects()
class Meta:
ordering = ('-published',)
def __str__(self):
return self.title

view.py

from rest_framework import generics
from blog.models import Post
from .serializers import PostSerializer

class PostList(generics.ListCreateAPIView):
queryset = Post.postobjects.all()
serializer_class = PostSerializer

class PostDetail(generics.RetrieveUpdateDestroyAPIView):
queryset = Post.objects.all()
serializer_class = PostSerializer

在PostDetail上,不是设置queryset属性,而是覆盖get_object方法来找到您想要更新的特定POST实例,然后确保在提交时在负载中发送'已发布'键:值对

像这样:

class PostDetail(generics.RetrieveUpdateDestroyAPIView):
serializer_class = PostSerializer

def get_object(self):
_id = self.request.data.get('id')
return get_object_or_404(Post, pk=_id)

PUT请求:

{
"id": 123,
"title": "New Post Title",
"published": <required-date-format-for-your-project>
}

最新更新