2016-12-29 89 views
0

所以我制作了和Embassy的django模型,一个Embassy需要两个国家参与,一个代表大使馆的国家和另一个Embassy所在的国家。我放了两个Country S作为外键在Embassy这里是我的models.py:Django模型没有外键对象集

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 

现在,当我进入外壳,我想找到什么使馆与国家相关:

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

当看在django tutorialChoice模型具有Question模型的外键,问题对象有一个属性是一组选择对象(q.choice_set.all()返回一个QuerySet)。但是,我的Country对象没有将Embassy对象设置为属性。这是为什么发生?我怎样才能解决这个问题?

回答

2

这是因为您已经提供了related_name,其中您引用了Country型号。另外Country正被Embassy模型中的两个字段引用。随着相关的名字,你可以这样做:

c.government.all() 

这将返回所有Embassy到该国c是政府。

c.location.all() 

将返回居住在国家c的所有Embassy c。

参考:Backward relationships