我有这个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>
}