Thursday, 15 January 2015

python - Inheriting specific parent model attributes in foreignkey->'self' relationship in Django -


मेरे पास एक Django मॉडल है:

  class Foo (models.Model): name = Model.CharField (अनोखा = सच) विशेषता 1 = मॉडल। फ्लोटफ़ील्ड (नल = सच, रिक्त = सच) विशेषता 2 = मॉडल। फ्लोटफ़ील्ड (नल = सच, रिक्त = सच) विशेषता 3 = मॉडल। बूलियन फिल्ड (शून्य = सच, रिक्त = सच) Attribute4 = models.CharField (null = True, blank = true) inherit = models.ForeignKey ('self', related_name = 'children', null = true, blank = true)  

I ऐसा करना चाहूँगा कि जब उत्तराधिकार रिक्त / रिक्त नहीं है, तो उस विशेषता 1 और विशेषता 2 आदि को मूल वस्तु से प्राप्त किया जाता है inherit ताकि जब मैं विशेषताओं का उपयोग करता हूं, तब मुझे मान मिल जाते हैं माता-पिता का मैं बच्चे में मूल्यों को निर्धारित करने की परवाह नहीं करता हूं।

मैंने मॉडल विधियों का उपयोग करने के बारे में सोचा है जैसे।:

  _attribute1 = models.FloatField (null = true, blank = true) Get_attribute1 (स्वयं): यदि self.inherit: return self.inherit._attribute1 else: return self._attribute1 set_attribute1 (स्वयं, मान): यदि नहीं self.inherit: self._attribute1 = value attribute1 = property (get_attribute1, set_attribute1)   

लेकिन मेरे बारे में 10 विशेषताओं के बाद से यह बदसूरत लग रहा है। क्या ऐसा करने का एक बेहतर तरीका है?

शायद __ getattr __ और < कोड> __ सेटैट्र __ यहां एक अच्छा विकल्प है।

  वर्ग फू (models.Model): name = models.CharField (अनन्य = सत्य) inherit = models.ForeignKey ('self' , संबंधित_नाम = 'बच्चों', नल = सच, रिक्त = सत्य) _attribute1 = मॉडल। फ्लोटफ़िल्ड (नल = सच, रिक्त = सत्य) _attribute2 = मॉडल। फ्लोटफ़िल्ड (नल = सत्य, रिक्त = सत्य) _attribute3 = मॉडल। बुलियनफिल्ड (रिक्त = सच = रिक्त = सत्य) _attribute4 = models.CharField (नल = सच, रिक्त = सच) def __getattr __ (स्वयं, नाम): अगर self.inherit और hasattr (self.inherit, नाम): वापसी getattr (self.inherit, रिटर्न सुपर (फू, सेल्फ) .__ Getattr __ (नाम) def __setattr __ (आत्म, नाम, मान) रिटर्न सुपर (रिवर्स गेटेटर (सेल्फ, '_' + नाम, कोई नहीं) : यदि self.inherit और hasattr (self.inherit, नाम): वापसी सेटैट आर (self.inherit, name, value) एलीफ हैटट्रर (स्वयं, '_' + नाम): रिटर्न स्व .__ डायस्ट __ [नाम] = मान रिटर्न सुपर (फू, सेल्फ) .__ सेटैट्र __ (नाम, वैल्यू)  < / Pre> 

अस्वीकरण: मैंने इसे चलाने की कोशिश नहीं की


No comments:

Post a Comment