2013-02-02 31 views
22

私は3つのモデルを作成しようとしています。 Person,AddressおよびAnniversy。計画は、1人の住所と1人の記念日を各人に持たせることです。しかし、各住所と記念日は複数の人を持つことができます。外部キーDjangoモデル

これまでのところ、私はOneToMany(foreign key)の関係が間違った方法かもしれないと思います。すなわち、各アドレスは1人の人を有することができるが、各人は複数のアドレスを有することができる。

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

他の方法でリレーションシップを作成します。どれでも1人だけアドレスと周年に接続することができますが、アドレスや記念日から参照することができ

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

:多対1の関係を作成するために、Person型に外部キーを追加複数のPersonエントリ。

AnniversaryおよびAddressオブジェクトには、逆の関係もあります。デフォルトではperson_setと呼ばれますが、必要に応じて別の名前を設定することができます。クエリのドキュメントのrelationships "backward"を参照してください。

関連する問題