2016-12-29 4 views
0

Итак, я делаю модели django от Country и Embassy, посольство требует участия двух стран, одной страны, представляющей посольство, и другой, в которой находится посольство. Я поставил два Country с, как внешние ключи в 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 tutorial с моделью Choice, имеющей внешний ключ модели Question, объекты вопроса имеют атрибут, который является набором объектов выбора (q.choice_set.all() возвращает QuerySet). Однако мои объекты Country не имеют объекта Embassy, установленного в качестве атрибута. Почему это происходит? Как я могу это исправить?

ответ

2

Это потому, что вы уже указали related_name, где указали модель Country. Также Country ссылается на два поля в модели Embassy. В совокупности с соответствующим именем, вы можете сделать:

c.government.all() 

Это вернет все Embassy, к которому страна с является правительство.

c.location.all() 

Вернется все Embassy, которые проживают в стране с.

Код: Backward relationships

Смежные вопросы