2009-04-08 14 views
18

क्या किसी अन्य मॉडल के डीजेंगो में फ़ील्ड पर कोई विदेशी कुंजी सेट करने का कोई तरीका है?Django मॉडल ने किसी अन्य मॉडल के क्षेत्र में विदेशी कुंजी सेट की है

उदाहरण के लिए, कल्पना करें कि मेरे पास ValidationRule ऑब्जेक्ट है। और मैं नियम को परिभाषित करना चाहता हूं कि किसी अन्य मॉडल में कौन सा फ़ील्ड मान्य किया जाए (साथ ही कुछ अन्य जानकारी, जैसे कि यह शून्य हो, डेटा-प्रकार, रेंज इत्यादि हो)

क्या कोई तरीका है django में इस क्षेत्र-स्तरीय मानचित्रण को स्टोर करने के लिए?

उत्तर

16

हां और नहीं। एफके रिश्ते को कक्षा के स्तर पर वर्णित किया गया है, और डेटाबेस में एफके एसोसिएशन को प्रतिबिंबित करता है, ताकि आप सीधे एफके पैरामीटर में अतिरिक्त जानकारी नहीं जोड़ सकें।

class ValidationRule(models.Model): 
    other = models.ForeignKey(OtherModel) 
    other_field = models.CharField(max_length=256) 

इस तरह, आप के साथ मैदान प्राप्त कर सकते हैं:

इसके बजाय, मैं एक स्ट्रिंग है कि अन्य मेज पर फ़ील्ड नाम धारण होने की सलाह देते हैं

v = ValidationRule.objects.get(id=1) 
field = getattr(v, v.other_field) 

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

65

मैं इस प्रयास नहीं किया है, लेकिन ऐसा लगता है कि Django 1.0 के बाद से आप की तरह कुछ कर सकते हैं: इस के लिए

class Foo(models.Model): 
    foo = models.ForeignKey(Bar, to_field='bar') 

प्रलेखन here है।

+4

+1 - अच्छा खोज! –

+2

कृपया फिर से प्रश्न पढ़ें। – ultrajohn

+0

बिल्कुल वही जो मैं खोज रहा था। मुझे उम्मीद है कि इसका मतलब यह भी है कि मैं 'foo.foo_bar = value_bar' कर सकता हूं। बार –

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