Django 查询集在模板中是惰性的

Django 查询集在模板中是惰性的,django,django-templates,django-queryset,Django,Django Templates,Django Queryset,我正在开发一个问答网站。我想我的代码太乱了。当只需要一个对象时,我会发送所有对象的查询集 就像在只需要一个问题时发送一个问题的所有答案一样。 我只印了一张 那个么在那个时它会影响数据库的所有记录还是我将在模板中打印的唯一记录 View.py questions = Question.objects.all() context = { 'questions':questions } return render(request,'index.html',context=context) @

我正在开发一个问答网站。我想我的代码太乱了。当只需要一个对象时,我会发送所有对象的查询集

就像在只需要一个问题时发送一个问题的所有答案一样。 我只印了一张

那个么在那个时它会影响数据库的所有记录还是我将在模板中打印的唯一记录

View.py

questions = Question.objects.all()
context = {
    'questions':questions
}
return render(request,'index.html',context=context)
@register.simple_tag
def getmostvotedanswer(answers):
    answer = answers.order_by('-vote')[0]
    return answer.answer 
模板_tag.py

questions = Question.objects.all()
context = {
    'questions':questions
}
return render(request,'index.html',context=context)
@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)
应答模式

  <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)

在您的模板中,您正在迭代问题,将所有答案传递给您的自定义模板标记,并找到投票最多的答案

如果这是您想要的,您可以简单地将排序放入您的答案模型中,如下所示:

class Answer(models.Model):
    vote = models.IntegerField(default=0)
    # ...

    class Meta:
        ordering = ['-vote']
这样,当您调用
question.answer\u set
时,它将根据
投票
字段自动对答案进行排序


所以你可以说
question.answer\u set.first
来获得投票率最高的答案。

你的
question
模型是什么样子的?@Reez0这里是这样的,你只想显示投票率最高的问题吗?不,我想显示投票率最高的问题@Reez0Oh ty这解决了这么多问题,也提高了性能。这太简单了简单。