如何在django中过滤其foriegn键不为null的模型对象?

时间:2018-02-08 10:45:45

标签: python django django-models

我有这两个模型:

class Questions(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')

class Choice(models.Model):
    question = models.ForeignKey(Question,on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)

并且在views.py中我想返回最后5个有选择的问题。换句话说,没有任何选择的问题不会返回。 我的观点:

class IndexView(generic.ListView):
    template_name = 'polls/index.html'
    context_object_name = 'latest_question_list'

    def get_queryset(self):
        return Question.objects.filter(pub_date__lte=timezone.now()).order_by('-pub_date')[:5]

我应该在return语句中应用哪些更改?

抱歉我的英语不好。谢谢

3 个答案:

答案 0 :(得分:1)

return Question.objects.filter(question_set__isnull=False, pub_date__lte=timezone.now()).order_by('-pub_date')[:5]

答案 1 :(得分:1)

重新编写get_queryset(),如下所示,

def get_queryset(self):
        return Question.objects.filter(question__isnull=False,pub_date__lte=timezone.now()).order_by('-pub_date')[:5]

答案 2 :(得分:0)

Choice.question_set.filter(pub_date__lte=timezone.now()).order_by('-pub_date')[:5]

这会向后使用以下外键关系,如Django docs here中所述。

Choice.question_set.all()用于通过跟踪Question后面的关系来获取所有可以选择的Choice个对象。