【发布时间】:2015-11-25 10:37:36
【问题描述】:
我有一个返回链接列表的网络服务。
{
[
{"id":1,"href":"http://website.com","title":"Title1"},
{"id":2,"href":"http://website.com","title":"Title2"},
{"id":3,"href":"http://website.com","title":"Title1"}
]
}
现在我想扩展它以返回字段voted,它会告诉我用户是否已经为此链接投票。
{
[
{"id":1,"href":"http://website.com","title":"Title1","voted": "True"},
{"id":2,"href":"http://website.com","title":"Title2","voted": "False"},
{"id":3,"href":"http://website.com","title":"Title1","voted": "True"},
]
}
实现这一目标的最佳方法是什么?
我已经创建了模型方法voted(self),但我认为这不是最好的方法,而且我仍然无法在我的模型类中访问 request.user。
links\model.py ----------------------------------------
class Link(models.Model):
href = models.URLField()
title = models.CharField(max_length=400)
def voted(self, request):
vote = UserVotes.objects.get(link_id=self.link.id, user_id=request.user)
if vote == 1:
return True
else:
return False
--------------------------------------------------------
votes\model.py ----------------------------------------
class UserVotes(models.Model):
user = models.ForeignKey(Account, blank=False)
link = models.ForeignKey(Link, blank=False)
vote = models.FloatField(null=True, blank=False)
class Meta(object):
unique_together = ('user', 'link')
--------------------------------------------------------
link\serializers.py -----------------------------------
class LinkSerializer(serializers.ModelSerializer):
voted = serializers.BooleanField()
class Meta:
model = Link
fields = ('id', 'href', 'title','voted')
read_only_fields = ('id', 'href', 'title', 'voted')
--------------------------------------------------------
【问题讨论】:
标签: django django-models django-views django-queryset django-managers