So mache ich Django-Modelle Country
und Embassy
, eine Botschaft erfordert zwei Länder beteiligt sein, ein Land, das die Botschaft darstellt, und ein anderes, das die Botschaft befindet. So ich habe zwei Hier ist meine models.py in Embassy
Country
s als Fremdschlüssel setzen:Django Modell hat keine Fremdschlüsselobjekt
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
wenn ich jetzt in die Schale gehen möchte ich finden, was Botschaften mit einem Land verbunden sind:
>>> 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'
Wenn schauen über das django tutorial mit dem Choice
Modell, das einen Fremdschlüssel des Modells Question
hat, haben die Frageobjekte ein Attribut, das eine Gruppe von Auswahlobjekten ist (q.choice_set.all()
gibt ein QuerySet zurück). Meine Country
Objekte haben jedoch kein Embassy
Objekt als Attribut festgelegt. Warum passiert dies? Wie kann ich das beheben?