Django模型没有外键对象集

时间:2016-12-29 06:38:09

标签: python django django-models foreign-keys

所以我制作CountryEmbassy的django模型,大使馆需要两个国家参与,一个国家代表大使馆,另一个大使馆位于所以我在Country这里放了两个Embassy个外键作为我的models.py:

from django.db import models

class Country(models.Model):
    code = models.CharField(primary_key=True, max_length=3) #ISO Alpha-3 Country Code
    name = models.CharField(max_length=50, db_column="Name")

    def __str__(self):
        return self.name


class Embassy(models.Model):
    government = models.ForeignKey(Country, on_delete=models.CASCADE, related_name="government")
    location = models.ForeignKey(Country, on_delete=models.CASCADE, related_name="location")
    name = models.CharField(max_length=200, db_column="Name")
    street_address = models.CharField(max_length=200, db_column="Address")
    city = models.CharField(max_length=50, db_column="City")
    phone_number = models.IntegerField(default=-1, db_column="Phone Number")
    fax_number = models.IntegerField(null=True, blank=True, db_column="Fax Number")
    email_address = models.CharField(max_length=200, db_column="Email")
    website = models.CharField(max_length=200, db_column="Link")

    def __str__(self):
        return self.name

现在,当我进入shell时,我想找到哪个大使馆与一个国家相关联:

>>> from appName.models import Country, Embassy
>>> c = Country(code="USA", name="United States of America")
>>> c.save()
>>> Country.objects.all()
<QuerySet [<Country: United States of America>]>
>>> c.embassy_set.all()
Traceback (most recent call last):
  File "<console>", line 1, in <module>
AttributeError: 'Country' object has no attribute 'embassy_set'

查看具有Choice模型外键的Question模型的django tutorial时,问题对象的属性是一组选择对象({{1返回一个QuerySet)。但是,我的q.choice_set.all()个对象没有将Country个对象设置为属性。为什么会这样?我怎样才能解决这个问题?

1 个答案:

答案 0 :(得分:3)

这是因为您已经提供了引用related_name模型的CountryCountry模型中的两个字段也引用Embassy。使用相关名称,您可以执行以下操作:

c.government.all()

这将返回国家/地区c为政府的所有Embassy

c.location.all()

将返回位于国家/地区的所有Embassy

参考:Backward relationships