Текущий код
У меня есть две модели (Post и View), как показано ниже.Представление - это то, для чего пользователь видел какое сообщение.
Модель сообщения:
class Post(models.Model):
creator = models.ForeignKey(User, on_delete = models.CASCADE)
text = models.CharField(max_length = 255)
timestamp = models.DateTimeField(default=now)
def __str__(self):
return str(self.pk)
Модель просмотра:
class View(models.Model):
viewer = models.ForeignKey(User, on_delete = models.CASCADE)
post = models.ForeignKey(Post, on_delete = models.CASCADE)
timestamp = models.DateTimeField(default=now)
def __str__(self):
return str(self.post.pk)
class Meta:
unique_together = ('post', 'viewer')
Мой views.py в настоящее время выглядит следующим образом:
@api_view(['GET'])
@login_required
def get_posts(request):
posts = list(Post.objects.all())
data = serialize('json', posts, use_natural_foreign_keys=True)
return HttpResponse(data, content_type="application/json")
Проблема
Теперь я хочу иметь возможность сериализации многих объектов Post и добавления атрибута к каждому объекту, который говорит, что пользователь сделалзапрос (request.user
) просмотрел сообщение.
Пример результата, который я хотел бы получить:
[
{
"model": "posts.post",
"pk": 1,
"fields": {
"creator": ...,
"content": "This is a sample post",
"timestamp": "2019-07-07T19:56:07.220Z",
"viewed_by_user": true <--- I want this attribute
}
},
{
"model": "posts.post",
"pk": 2,
"fields": {
"creator": ...,
"content": "This is another sample post",
"timestamp": "2019-07-10T13:04:19.220Z",
"viewed_by_user": false <--- I want this attribute
}
}
]
Могу ли я добиться этого с помощью сериализаторов django?Должен ли я структурировать свои модели по-другому?
Я использую django-rest-framework для запросов.Вы можете спросить меня, нужна ли какая-либо другая информация, чтобы ответить на мой вопрос.Любая помощь будет оценена.