我正在一个问答网站上工作。我认为我对代码一团糟。我仅在需要一个对象时才发送查询集所有对象。
就像在只需要一个问题时发送一个问题的所有答案。 我只打印一张。
那么,那会影响数据库的所有记录还是仅影响我将在模板中打印的记录?
View.py
questions = Question.objects.all()
context = {
'questions':questions
}
return render(request,'index.html',context=context)
template_tag.py
@register.simple_tag
def getmostvotedanswer(answers):
answer = answers.order_by('-vote')[0]
return answer.answer
index.html
<p>{% getmostvotedanswer question.answer_set.all %}</p>
在这种情况下,我将发送所有答案,但只需要这样做,所以 这会影响数据库的性能吗?
问题模型
class Question(models.Model):
question = models.CharField(max_length=400)
uid = models.ForeignKey("User",on_delete=models.SET_DEFAULT,default=1,related_name='user_q_id_set')
vote = models.IntegerField(default=0)
created_at = models.DateTimeField(auto_now_add=True)
catitle = models.ForeignKey("Category", on_delete=models.CASCADE)
editUser = models.ManyToManyField("User",related_name='user_q_edit_set',null=True,blank=True)
答案模型
class Answer(models.Model):
answer = models.TextField()
qid = models.ManyToManyField("Question")
uid = models.ForeignKey("User",on_delete=models.CASCADE,related_name='user_a_id_set')
vote = models.IntegerField(default=0)
created_at = models.DateTimeField(auto_now_add=True)
editUser = models.ManyToManyField("User",related_name='user_a_edit_set',null=True,blank=True)
答案 0 :(得分:0)
在模板中,您要遍历所有问题,将全部答案传递给自定义模板标签,并找到投票最多的一个。
如果这就是您想要的,您可以像这样简单地将排序放入答案模型中:
class Answer(models.Model):
vote = models.IntegerField(default=0)
# ...
class Meta:
ordering = ['-vote']
这样,当您致电question.answer_set
时,它将自动按vote
字段对答案进行排序。
因此您可以说question.answer_set.first
来获得投票最高的答案。