我有一个模型,看起来像这样:
class Topic(models.Model):
name = models.CharField(max_length=50)
class Vote(models.Model):
user = models.ForeignKey(User, related_name='user_set')
topic = models.ForeignKey(Topic, related_name='topic_set')
score = models.IntegerField(default=0)
class Meta:
unique_together = ("user", "topic")
在我的索引视图中,我想显示所有主题的列表。如果用户已经对该主题进行了投票,它应该显示他的分数。如果用户没有投票,它应该显示一个表单供用户投票。
我已经用这个方法扩展了模型作为Topic
类的一部分:
def user_has_already_voted(self, user):
if not Vote.objects.filter(topic=self.id,user=user.id):
return True
else:
return False
但是我不知道这是否是 Django 的方式,因为我不知道如何使用相应的模板编写视图来执行此任务。截至目前,我使用的是通用IndexView
的,如下所示:
class IndexView(generic.ListView):
template_name = 'topics/index.html'
context_object_name = 'latest_topic_list'
def get_queryset(self):
return Topic.objects.order_by('-pub_date')[:5]