【发布时间】:2019-11-21 04:13:03
【问题描述】:
当前代码
我有两个模型(Post 和 View),如下所示。 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) 是否查看了 Post。
我希望收到的结果示例:
[
{
"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 来处理请求。您可以问我是否需要任何其他信息才能回答我的问题。任何帮助将不胜感激。
【问题讨论】:
-
如果你使用 DRF,你应该使用 DRF 序列化器类,而不是根本无法定制的基本 Django 类。
-
是的,但我不熟悉如何使用它们来解决这个确切的问题。
标签: python json django serialization django-rest-framework