2012-01-19 7 views
5

मेरे पास कुछ मॉडल हैं जिनमें सभी की कुछ सामान्य कार्यक्षमता है। प्रत्येक मॉडल एक भौतिक रूप से स्टॉक प्रकार का आइटम है, इसलिए वे stock जैसी चीजें साझा करते हैं और कम स्टॉक चेतावनी ईवेंट (ईमेल भेजता है) जैसी चीजें साझा करते हैं।Django: बच्चे मॉडल में लेबल लेबल या help_text ओवरराइड करें

कोड को डुप्लिकेट करने के बजाय, मैंने एक अमूर्त मॉडल लिखा और उससे प्राप्त किया।

class LowStockModel(models.Model): 
    stock = stock = models.IntegerField() 
    out_of_stock_behaviour = models.CharField(max_length=20, choices=[...]) 

    class Meta: 
     abstract = True 

    def save(self, *args, **kwargs): 
     super(self.__class__, self).save(*args, **kwargs) 
     if self.stock <= 0: 
      #... 

मेरे समस्या मैं लेबल बदलने के लिए या बच्चे कक्षाओं मैं उत्पन्न करने वाला हूँ में विभिन्न help_text को stock क्षेत्र को जोड़ने की आवश्यकता है। यह बहुत महत्वपूर्ण है क्योंकि ग्राहक (और उनके कर्मचारियों) को इकाइयों पर निर्देशों की आवश्यकता होती है। मैंने बच्चे __init__ में चारों ओर मुंगिंग करने की कोशिश की है लेकिन मुझे कहीं भी नहीं मिल रहा है।

टीएल; डॉ आप बच्चे के मॉडल से किसी क्षेत्र पर लेबल कैसे बदल सकते हैं?

+0

ऐसा न करें: 'सुपर (स्वयं .__ वर्ग__, स्वयं)' आप आसानी से अनंत रिकर्सन प्राप्त कर सकते हैं। – DrTyrsa

+3

यह सुंदर नहीं होगा, लेकिन: http://stackoverflow.com/a/928774/16361 – AdamKG

+0

धन्यवाद @AdamKG यह सही है। – Oli

उत्तर

1

विरासत एक अमूर्त वर्ग से बना है, Django में आप उपयोग करना चाहते हो सकता है: अब हम बच्चे को अनुकूलित करना चाहिए

class AncestorClass(models.Model): 
    stock = models.CharField(max_length=50, verbose_name='AncestorStockName') 
    # etc ... 

और:

CustomClass._meta.get_field('yourfield').verbose_name = 'Your custom text'

आपका वर्गों की तरह होना चाहिए इस तरह की कक्षा:

class ChildClass(AncestorClass): 
    stock = models.CharField... # Customize your stock field 

ChildClass._meta.get_field('stock').verbose_name = 'CustomVerboseStock' 
0

यह काम करना चाहिए:

class MyForm(ModelForm): 
    def __init__(self, *args, **kwargs): 
     super(MyForm, self).__init__(*args, **kwargs) 
     self.fields['stock '].label = "any label"