Это мой первый проект, использующий Django rest framework, и я изо всех сил пытаюсь понять это правильно. Я знаю, что в основной структуре 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
Я получаю эту ошибку:
AttributeError в / posts / объект 'function' не имеет атрибута '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']