什么是" FOO_set"模型中的属性?

时间:2014-06-05 14:43:09

标签: python django django-models

我正在阅读这里的教程,对于Django 1.6:https://docs.djangoproject.com/en/1.6/intro/tutorial01/

它使用我不认识的属性choice_set。我认为这是decapitalized子对象(使用ForeignKey形成,如本教程前面所述),但是当我自己尝试这个时会产生错误。我的假设是否正确?

我知道我并不是最简洁的,所以请问你是否需要进一步澄清。

这是我的models.py

from django.contrib.auth.models import User

class Information(models.Model):
    title = models.CharField(max_length = 200)
    body = models.TextField()
    date = models.DateTimeField()

    def __unicode__(self):
        return self.title

class InformationChild(models.Model):
    information = models.ForeignKey(Information)
    child_text = models.CharField(max_length = 200)

    def __unicode__(self):
        return self.child_text

这就是我的尝试:

i1 = Information.objects.filter(pk=1)
i1.informationchild_set.all()

这应该根据教程返回一个空列表,因为我没有将任何子项设置为父项。如果我完全理解这一点,那就是。

1 个答案:

答案 0 :(得分:1)

filter方法返回a QuerySet而不是一个模型实例。 QuerySet是一个Django对象,表示对数据库的查询,可以对其进行过滤,切片和迭代以获得结果。您可以使用QuerySet获得i1[0]的第一个结果,但这不是您的最佳选择。

在您的情况下,由于您确定只能获得一个且只有一个结果,因此您需要使用get方法:

i1 = Information.objects.get(pk=1)

# then, this is possible:
i1.informationchild_set.all()

另请参阅:Difference between Django's filter() and get() methods