【发布时间】:2020-09-14 06:27:43
【问题描述】:
这是我第一个使用 Django REST 框架的项目,我正在努力做到这一点。我知道在主流 Django 框架中,如果我需要为基于类的视图添加额外的上下文,我会这样做:
class PostDetail(DetailView):
model = Post
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
# Add in a QuerySet of all the books by a certain author John
context['john_books'] = Book.objects.filter(author=john)
return context
然后,我将能够在我的模板中访问上下文“john_books”。现在我需要通过将额外的上下文传递给我的 PostViewSets 来做同样的事情。在详细视图中,我想在我的 api 端点中访问由该帖子作者创作的帖子列表(类似于“来自同一作者的帖子”)。我已经阅读了有关get_serializer_context 的信息,但仍然无法弄清楚如何实现它。这是我到目前为止所拥有的:
class PostViewSets(viewsets.ModelViewSet):
queryset = Post.objects.all()
serializer_class = PostSerializer
def get_serializer_context(self):
context = super(PostViewSets, self).get_serializer_context()
author = self.get_object.author
author_posts = self.get_queryset().filter(author=author)
context.update({'author_posts': author_posts})
return context
我得到这个错误:
/posts/ 'function' 对象的 AttributeError 没有属性 'author'
我的帖子模型:
class Post(models.Model):
title = models.CharField(max_length=100, unique=True)
body = models.TextField()
is_featured = models.BooleanField(default=True)
viewcount = models.IntegerField(default=0)
author = models.ForeignKey(User, on_delete=models.CASCADE)
created = models.DateTimeField(auto_now_add=True)
还有我的 PostSerializer 类:
class PostSerializer(serializers.ModelSerializer):
author = UserSerializer()
class Meta:
model = Post
fields = ['id', 'title', 'body', 'author', 'viewcount', 'is_featured', 'created']
【问题讨论】:
-
@ncopiy 的回答似乎是正确的。它不起作用,因为有几个问题,您可能需要逐步进行并为新问题打开新问题。
标签: django django-rest-framework