2012-03-16 18 views
7

मेरे पास दो मॉडल हैं जो एक कंपनी है और दूसरा योग्यता है और एक उपयोगकर्ता की कई योग्यता
है, अब मुझे व्यवस्थापक में उपयोगकर्ता बनाने के दौरान योग्यता दर्ज करने की आवश्यकता है, मैं इसे कैसे कर सकता हूं?django एक से कई संबंध

मैंने उपयोगकर्ताओं के मॉडल में कई क्षेत्रों को रखने की कोशिश की है लेकिन व्यर्थ में ... अन्य उपयोगकर्ता से संबंधित योग्यता उन क्षेत्रों में आबादी है जहां मुझे नए उपयोगकर्ता के लिए नई योग्यता बनाने की आवश्यकता है।

कोड इस प्रकार ..

class Qualification(models.Model): 
    qualification = models.CharField(max_length=250) 
    max_marks = models.IntegerField(max_length=50) 
    marks_obtained = models.IntegerField(max_length=50) 
    qualifying_year = models.DateField(auto_now=False, null=True) 

class CompanyUser(User): 
    date_of_birth = models.DateField(auto_now=False, null=True) 
    position = models.CharField(max_length=100) 
    qualifications = models.ManyToManyField(Qualification) 

यहां कंपनी उपयोगकर्ता जानकारी है ..

{ "उपयोगकर्ता नाम", "स्टीव", "स्थिति": "वरिष्ठ इंजीनियर", "date_of_birth" : "1986/05/14"}

{ "योग्यता": "माध्यमिक विद्यालय", "max_marks": "1000", "marks_obtained": "850", "qualifying_year": "1990"}

{"क्वा लिफिकेशन ":" अंडरग्रेजुएशन "," max_marks ":" 750 "," marks_obtained ":" 680 "," qualifying_year ":" 1992 "}

{" योग्यता ":" स्नातकोत्तर "," max_marks ":" 1500 "," marks_obtained ":" 1280 "," qualifying_year ":" 1997 "}

+0

क्या योग्यता एक उपयोगकर्ता से संबंधित होनी चाहिए? या क्या कई उपयोगकर्ताओं के पास समान योग्यता हो सकती है? बाद के मामले में ManyToManyField बस सही है, क्योंकि एक कंपनी उपयोगकर्ता के पास कई योग्यताएं हैं और एक योग्यता कई कंपनी यूज़र द्वारा आयोजित की जा सकती है। – j0ker

+0

@jOker --- चूंकि योग्यता में उपयोगकर्ता द्वारा प्राप्त अंक/स्कोर होते हैं, यह ** बिल्कुल एक ** उपयोगकर्ता से संबंधित होना चाहिए, और योग्यता की संख्या उपयोगकर्ता से उपयोगकर्ता में भिन्न नहीं होती है। उपयोगकर्ता 1 में 2 योग्यताएं हैं तो उपयोगकर्ता 2 में 2 या 2 से अधिक योग्यताएं हो सकती हैं। – Dharani

उत्तर

13

एक-से-कई संबंध जो आप खोज रहे हैं वह Django में मौजूद नहीं है। इसकी आवश्यकता नहीं है, क्योंकि आप इसे दूसरे तरीके से कर सकते हैं: उपयोगकर्ता के योग्यता से विदेशीकी संबंध के साथ। अपने उदाहरण के अनुसार, आप मॉडल के रूप में निम्नानुसार निर्धारित करना होगा:

class Qualification(models.Model): 
    qualification = models.CharField(max_length=250) 
    max_marks = models.IntegerField(max_length=50) 
    marks_obtained = models.IntegerField(max_length=50) 
    qualifying_year = models.DateField(auto_now=False, null=True) 
    user = models.ForeignKey('CompanyUser', related_name='qualifications') 

class CompanyUser(User): 
    date_of_birth = models.DateField(auto_now=False, null=True) 
    position = models.CharField(max_length=100) 

तो, वहाँ कोई संबंध नहीं CompanyUser से निर्दिष्ट योग्यता है, लेकिन आप CompanyUser को योग्यता से एक ForeignKey रिश्ता नहीं है (यानी प्रत्येक योग्यता एक उपयोगकर्ता के अंतर्गत आता है, लेकिन एकाधिक योग्यता एक ही उपयोगकर्ता से संबंधित हो सकती है)। Django स्वचालित रूप से CompanyUser से योग्यता के पीछे के संबंध को बनाए रखता है, जो एक-से-कई संबंध है जिसे आप ढूंढ रहे हैं। विदेशीकी के related_name विकल्प से आप पिछड़े संबंध (इस मामले में 'योग्यता') के लिए एक सार्थक नाम निर्दिष्ट कर सकते हैं। अब आप 0Uविशेषता के साथ किसी कंपनी यूज़र ऑब्जेक्ट पर योग्यता तक पहुंच सकते हैं।

व्यवस्थापक में आप पहले एक नया कंपनी यूज़र बनाते हैं और उसके बाद योग्यता की एक मनमानी संख्या जिसे आप विदेशी उपयोगकर्ता के माध्यम से इस उपयोगकर्ता को असाइन करते हैं।

Model relationships के बारे में Django दस्तावेज़ अनुभाग में उस सामान के बारे में पढ़ना सुनिश्चित करें।

+0

@joker उत्तर के लिए धन्यवाद यह सहायक था, लेकिन मुझे उपरोक्त समाधान के साथ एक और समस्या है। CompanyUser बनाने के बाद मुझे उस उपयोगकर्ता के लिए योग्यताएं बनाने की आवश्यकता है। लेकिन मुझे कंपनी उपयोगकर्ता बनाने के दौरान योग्यताएं बनाने की जरूरत है। मैं उसे कैसे कर सकता हूँ। – Dharani

+0

आपको स्पष्ट रूप से कंपनी यूज़र बनाने की ज़रूरत है, क्योंकि योग्यताएं विदेशी आईडी के रूप में अपनी आईडी पर भरोसा करती हैं।इसलिए, योग्यता सहेजी जाने पर उपयोगकर्ता पहले ही डेटाबेस में होना चाहिए। व्यवस्थापक में एक चरण में दोनों कार्यों को करने का कोई अंतर्निहित तरीका नहीं है। हालांकि, यदि आप स्वयं द्वारा ऐप लिख रहे हैं, तो आप कंपनी यूज़र के साथ-साथ इसके योग्यता के लिए डेटा इनपुट करने के लिए एक फॉर्म बना सकते हैं, सर्वर को डेटा भेज सकते हैं और उपयोगकर्ता को पहले और उसके योग्यता को सहेजने के लिए व्यू फ़ंक्शन का उपयोग कर सकते हैं । – j0ker

+0

@ j0ker-- धन्यवाद कि वास्तव में सहायक था। मैं सोच रहा था कि कोई अंतर्निहित कार्यक्षमता थी या नहीं। – Dharani

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