2012-06-05 5 views
11

में कई वस्तुओं में इनलाइन जोड़ना मैं Django के लिए बिल्कुल नया हूं और इसके संबंधपरक मॉडल और इनलाइन व्यवस्थापक रूपों (docs on InlineModelAdmin) पर प्रलेखन पढ़ रहा हूं, मैं यह पता लगाने के लिए संघर्ष कर रहा हूं कि निम्नलिखित में से संभव है या नहीं बॉक्स, या अगर मुझे अपना फॉर्म बनाना चाहिए।Django व्यवस्थापक

चलो कहते हैं कि मैं दो वस्तुओं करते हैं:

class Film(Model): 
    director = ManyToManyField('Director') 
अब विस्तार के रूप में

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

class DirectorInline(admin.TabularInline): 
    model = Director 
    extra = 3 


class FilmAdmin(admin.ModelAdmin): 
    inlines = (
     DirectorInline, 
     ) 

यह एक त्रुटि फेंकता है, क्योंकि यह निदेशक वस्तु पर एक विदेशी कुंजी की अपेक्षा करता है। क्या मैं कस्टम फॉर्म, सत्यापनकर्ता इत्यादि के बिना संभव हासिल करने की कोशिश कर रहा हूं? सही दिशा में किसी भी सुझाव की सराहना की जाएगी, अग्रिम धन्यवाद।

उत्तर

20

filter_vertical या filter_horizontal संपत्ति के साथ व्यवस्थापक या विजेट में कई से कई फ़ील्ड के लिए डिफ़ॉल्ट विजेट आपको नई वस्तु जोड़ने की अनुमति देता है। पॉपअप विंडो खोलने और नए निदेशक उदाहरण जोड़ने के लिए फ़ील्ड के पास एक हरा "+" चिह्न है।

लेकिन यदि आपको इनलाइन शैली व्यवस्थापक की आवश्यकता है तो आपको through-model का संदर्भ देना चाहिए। यदि आप कस्टम मॉडल निर्दिष्ट नहीं करते हैं तो Django निदेशक और फिल्म के लिए 2 विदेशी कुंजी के साथ एक साधारण मॉडल बनाता है।

तो तुम जैसे

class DirectorInline(admin.TabularInline): 
    model = Film.director.through 
    extra = 3 

यह इनलाइन बनाने के लिए एक अपवाद से आगे नहीं बढ़ेगी कोशिश कर सकते हैं और एक इनलाइन प्रपत्र उत्पन्न होगा, लेकिन आप ड्रॉप-डाउन सूची से निर्देशकों का चयन करना होगा। मुझे लगता है कि आप कस्टम फॉर्म का उपयोग करके इसे ओवरराइट कर सकते हैं।

+0

इगोर, (या कोई और), आप इनलाइन जैसे फ़ील्ड में विकल्प कैसे जोड़ेंगे? – Greg

+2

@ ग्रेग मैं वास्तव में समझ नहीं पा रहा हूं कि आप क्या हासिल करने का प्रयास करते हैं। यदि आप अपने एम 2 एम मॉडल में अतिरिक्त डेटा सहेजना चाहते हैं, तो आप मॉडल के माध्यम से कस्टम का उपयोग कर सकते हैं - https://docs.djangoproject.com/en/1.6/topics/db/models/#intermediary-manytomany यदि आप केवल फ़ील्ड जोड़ना चाहते हैं व्यवस्थापक पैनल के लिए, आप 'DirectorInline.form'' – Igor

+0

@Igor को फिर से परिभाषित कर सकते हैं Inline.form को फिर से परिभाषित कैसे करें? – mamasi