2013-02-02 26 views
22

मैं 3 मॉडल बनाने की कोशिश कर रहा हूं; Person, Address और 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 और Address ऑब्जेक्ट्स को रिवर्स, बैकवर्ड रिश्ते भी दिया जाएगा; डिफ़ॉल्ट रूप से इसे person_set कहा जाएगा, लेकिन यदि आपको आवश्यकता हो तो आप एक अलग नाम कॉन्फ़िगर कर सकते हैं। प्रश्न प्रलेखन में relationships "backward" देखें।

संबंधित मुद्दे