2013-02-02 286 views
22

我試圖創建3個模型; Person,AddressAnniversy。計劃是爲每個人提供一個地址和一個Anniversy。但是每個地址和anniversy可以有多個人。外鍵Django模型

到目前爲止,我有以下,但我認爲OneToMany(foreign key)關係可能是錯誤的方式。即每個地址可以有一個人,但每個人可以有多個地址。

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) 

回答

47

您以相反的方式創建關係;外鍵添加到Person類型來創建一個多到一的關係:

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() 

任何一個人只能連接到一個地址和一個週年,但地址和紀念日可以被引用多個Person條目。

Anniversary and Address objects will be given an reverse,backwards relationship too;默認情況下它將被稱爲person_set,但如果需要,您可以配置其他名稱。在查詢文檔中查看以下relationships "backward"