2009-07-06 9 views
29

में विशेषताओं को जोड़ना मैं एक मिश्रण लिख रहा हूं जो मेरे मॉडल को आसानी से मूल्यों के गहरे नियम (जैसे .values ​​(), लेकिन रिवर्सिंग रिलेशनशिप में अनुवाद करने की अनुमति देगा)। इन की परिभाषा करने के लिए साफ जगह, मॉडल में खुद को हो रहा है एक ला:Django मॉडल के मेटा क्लास

TypeError: 'class Meta' got invalid attribute(s): schema 

(पूरे स्टैक ट्रेस: ​​

class Person(models.Model, DeepValues): 
    name = models.CharField(blank=True, max_length=100) 
    tribe = models.ForeignKey('Tribes') 

    class Meta: 
     schema = { 
      'name' : str, 
      'tribe' : { 
       'name' : str 
      } 
     } 

Person.objects.all().deep_values() => { 
    'name' : 'Andrey Fedorov', 
    'tribe' : { 
     'name' : 'Mohicans' 
    } 
} 

हालांकि, Django मेरे साथ class Meta में यह भी शामिल है के बारे में शिकायत here)

अब, मुझे लगता है कि मैं इसे अपने मिश्रण में व्यापक रूप से ओवरराइड कर सकता हूं, लेकिन क्या इस जानकारी को संग्रहीत करने का एक और शानदार तरीका है?

उत्तर

45

मैं के बारे में सुरुचिपूर्ण पता नहीं है, लेकिन एक व्यावहारिक तरीका है:

import django.db.models.options as options 

options.DEFAULT_NAMES = options.DEFAULT_NAMES + ('schema',) 

जाहिर है, अगर Django कभी अपने आप में एक 'स्कीमा' विशेषता जोड़ा इस टूट जाएगा। लेकिन हे, यह एक विचार है ... आप हमेशा एक विशेषता नाम चुन सकते हैं जो संघर्ष करने की संभावना कम है।

+5

वंशावली के लिए, यह काम नहीं करता है, लेकिन यह किया गया: विकल्प .DEFAULT_NAMES = options.DEFAULT_NAMES + ('default_values',) –

+2

ओह ... यह संभवतः है क्योंकि मेरा समाधान DEFAULT_NAMES को एक सूची में परिवर्तित करता है, जबकि आपका परिष्करण इसे एक ट्यूपल के रूप में रखता है। –

+0

सबसे अधिक संभावना है! :) –

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