У меня есть две таблицы под названием Post
и Reply
. Пользователи могут создать только один Response
для каждого Post
. Модели выглядят следующим образом:Добавить булевское поле, если строка существует в другой таблице?
class Post(models.Model):
name = models.CharField(max_length = 100)
class Reply(models.Model):
post = models.ForeignKey(Post, related_name = 'replies')
Теперь у меня есть мнение, возвращающий сообщения, как это:
class PostList(generics.ListAPIView):
permission_classes = (permissions.IsAuthenticated,)
queryset = Post.objects.all()
serializer_class = PostSerializer
И сериализатор для сообщений:
class PostSerializer(serializers.ModelSerializer):
class Meta:
fields = ('id', 'name')
Результаты из этой точки зрения выглядят следующим образом:
[
{
"id": "1",
"name": "The first post"
},
{
"id": "2",
"name": "The second post"
}
]
Теперь, к настоящей проблеме: я хотел бы иметь логическое поле в результатах, которое было бы true
, если пользователь ответил на сообщение, и false
, если они этого не сделали. В принципе, результат для ситуации, когда текущий пользователь ответил на первый пост, но не второй пост будет выглядеть следующим образом:
[
{
"id": "1",
"name": "The first post",
"replied": "true"
},
{
"id": "2",
"name": "The second post",
"replied": "false"
}
]
Как этого добиться? У меня есть подозрение, что это как-то должно быть реализовано в сериализаторе, но я не знаю, как это сделать.
Заранее благодарим за вашу помощь!
Первой идее заключается в добавлении пользовательского сериализатора поля метод в вашем сериализатороме (http://www.django-rest-framework.org/api-guide/ fields/# serializermethodfield), но имейте в виду, что у вас должен быть текущий пользовательский объект в вашем классе serializer (например, вы можете переопределить конструктор сериализатора для его передачи). – dydek