2013-02-02 17 views
22

Ich versuche, 3 Modelle zu erstellen; Person, Address und Anniversy. Der Plan ist, eine Adresse und einen Jahrestag für jede Person zu haben. Aber jede Adresse und jedes Jahr kann mehrere Personen haben.Fremdschlüssel Django Modell

Bis jetzt habe ich die folgenden, aber ich denke, die OneToMany(foreign key) Beziehungen vielleicht den falschen Weg. d. h. jede Adresse kann eine Person haben, aber jede Person kann mehrere Adressen haben.

from django.db import models 

class Person(models.Model): 
    name = models.CharField(max_length=50) 
    birthday = models.DateField() 

    def __unicode__(self): 
     return u'%s' % (self.name) 

class Address(models.Model): 
    person = models.ForeignKey(Person) 
    address = models.CharField(max_length=150) 

    def __unicode__(self): 
     return u'%s' % (self.address) 

class Anniversy(models.Model): 
    person = models.ForeignKey(Person) 
    anniversy = models.DateField() 

    def __unicode__(self): 
     return u'%s' % (self.anniversy) 

Antwort

47

Sie erstellen die Beziehungen umgekehrt; hinzufügen Fremdschlüssel zum Person Typ mit einer Viele-zu-Eins-Beziehung zu erstellen:

class Person(models.Model): 
    name = models.CharField(max_length=50) 
    birthday = models.DateField() 
    anniversary = models.ForeignKey(Anniversary) 
    address = models.ForeignKey(Address) 

class Address(models.Model): 
    line1 = models.CharField(max_length=150) 
    line2 = models.CharField(max_length=150) 
    postalcode = models.CharField(max_length=10) 
    city = models.CharField(max_length=150) 
    country = models.CharField(max_length=150) 

class Anniversary(models.Model): 
    date = models.DateField() 

Jede Person kann nur auf ein Adresse und ein Jahrestag verbunden sein, aber Adressen und Geburtstage können aus referenziert werden mehrere Person Einträge.

Anniversary und Address Objekte werden auch eine umgekehrte, umgekehrte Beziehung erhalten; Standardmäßig wird es person_set genannt, aber Sie können einen anderen Namen konfigurieren, wenn Sie müssen. Siehe Folgende relationships "backward" in der Abfragedokumentation.

Verwandte Themen