2011-02-06 9 views
23

मान लें कि हमारे पास कक्षा Employee है। मैं एक ऐसा क्षेत्र बनाना चाहता हूं जो एक ही कक्षा के एक अलग उदाहरण का संदर्भ देता हो।Django-model: स्वयं को संदर्भित करने के लिए कैसे?

यह कैसे लिखें? निम्नलिखित कोड के बारे में कैसे?

ref_employee= models.ForeignKey('self',null=True,blank=True) 

उत्तर

44

http://docs.djangoproject.com/en/dev/ref/models/fields/#foreignkey

एक पुनरावर्ती rel बनाने के लिए एटियंसशिप - एक ऑब्जेक्ट जिसमें कई से एक स्वयं के साथ संबंध है - models.ForeignKey('self') का उपयोग करें।

तो आपके पास यह सही है। प्रायः तेजी निर्धारित करने के लिए कोड यह चलाकर आप क्या चाहते हो जाएगा :)

+1

उत्तर देने के लिए धन्यवाद। इसके अलावा, सिर्फ इसलिए कि कुछ काम करने के लिए प्रतीत होता है इसका मतलब यह नहीं है कि इस तरह से ऐसा करना एक अच्छा विचार है। सही तरीके से पता लगाने और अन्य लोगों के अनुभव और गलतियों से सीखने के लिए बेहतर है। – dsjoerg

2

आप ( पैकेज सहित एक स्ट्रिंग का उपयोग,) नाम से अन्य मॉडलों, के बजाय सीधे वर्ग देख सकते हैं:

तो, अपने Employee वर्ग hr अनुप्रयोग में है अगर:

class Employee(models.model): 
    other_employee = models.ForeignKey('hr.models.Employee', null=True, blank=True) 
+1

मैंने पाया कि संदर्भ मॉडल संदर्भ का 'मॉडल' भाग (यानी बाहर छोड़ने के लिए की जरूरत 'models.ForeignKey ('घंटा। कर्मचारी', शून्य = सही, खाली = सही) ') – CoatedMoose

0

id और ref_employee_id मजबूर कर अलग मान होना एक बाधा Django के ORM के दायरे से बाहर है। आपको SQL स्तर के माध्यम से या मैन्युअल रूप से SQL के माध्यम से डेटाबेस स्तर पर कहा गया बाधा जोड़ने की आवश्यकता होगी।

2

मेरा मानना ​​है कि आप भी एप्लिकेशन के नाम जो कैसा लगेगा बाहर कर सकते हैं:।

ref_employee= models.ForeignKey('Employee',null=True,blank=True) 
संबंधित मुद्दे