2009-06-08 13 views
5

के साथ व्यवस्थापक में फॉर्म प्रमाणीकरण मेरे पास एक मॉडल है, ऑर्डर्डलिस्ट, जिसका उद्देश्य उपयोगकर्ता द्वारा आदेशित सामग्री ऑब्जेक्ट्स की एक सूची होना है। ऑर्डर्डलिस्ट में कई विशेषताएं हैं, जिनमें एक साइट भी शामिल है।इनलाइन फॉर्मेट और मॉडल फॉर्म

सामग्री ऑब्जेक्ट्स ऑर्डर्ड लिस्टरो क्लास के माध्यम से उससे जुड़ा हुआ है, जिसे ऑर्डर्डलिस्ट के व्यवस्थापक में व्यवस्थापक में इनलाइन फॉर्मेट के माध्यम से लाया जाता है।

class OrderedList(GenericList): 

    objects = models.Manager() 
    published = GenericListManager() 

class OrderedListRow(models.Model): 

    list = models.ForeignKey(OrderedList) 
    content_type = models.ForeignKey(ContentType) 
    object_id = models.PositiveSmallIntegerField() 
    content_object = generic.GenericForeignKey("content_type", "object_id") 
    order = models.IntegerField('order', blank = True, null = True) 

(ऑर्डर्डलिस्ट को बड़े जेनेरिकलिस्ट सार से साइट फ़ील्ड विरासत में मिला है)।

यहां मेरी समस्या है; जब उपयोगकर्ता व्यवस्थापक प्रपत्र को सहेजता है, तो मैं यह सत्यापित करना चाहता हूं कि प्रत्येक ऑर्डर्ड लिस्टरो द्वारा मैप किए गए प्रत्येक सामग्री ऑब्जेक्ट उसी साइट से संबंधित है जो ऑर्डर्डलिस्ट करता है (सूची केवल 1 साइट से संबंधित हो सकती है; सामग्री ऑब्जेक्ट्स एकाधिक से संबंधित हो सकती हैं)।

मैं ऑर्डर्डलिस्ट के व्यवस्थापक फॉर्म के क्लीन() को ओवरराइड कर सकता हूं, लेकिन इसमें इनलाइन फॉर्मेट शामिल नहीं है जिसमें ऑर्डर्ड लिस्टरो शामिल हैं, इसलिए यह उस डेटा तक नहीं पहुंच सकता है। मैं ऑर्डर्ड लिस्टरो के इनलाइन फॉर्मेट के साफ़ को ओवरराइड कर सकता हूं, लेकिन यह सूची तक नहीं पहुंच सकता है। ऑर्डर्डलिस्ट के फॉर्म डेटा और फॉर्मेट के फॉर्म डेटा दोनों तक पहुंचने के लिए मुझे फॉर्म सत्यापन के संदर्भ में कुछ तरीके की आवश्यकता है ताकि मैं ऑर्डर्डलिस्ट की साइट के खिलाफ ऑर्डर्ड लिस्टरो की सामग्री ऑब्जेक्ट्स की सभी साइटों को देख सकूं, और कोई समस्या होने पर सत्यापन त्रुटि फेंक दे । अब तक मुझे कोई फ़ंक्शन नहीं मिला है कि ऑर्डर्डरो और ऑर्डर्ड लिस्टरो दोनों के लिए साफ़ डेटा

उत्तर

5

इनलाइन फॉर्मेट में self.instance को मूल ऑब्जेक्ट, यानी ऑर्डर्डलिस्ट का संदर्भ लेना चाहिए।

1

मैं एक ही मुद्दे से निपट रहा हूं। और दुर्भाग्य से मुझे नहीं लगता कि उपरोक्त उत्तर पूरी तरह से चीजों को कवर करता है।

यदि इनलाइन फॉर्मेट और व्यवस्थापक फॉर्म दोनों में परिवर्तन हैं, तो self.instance तक पहुंच सटीक डेटा नहीं देगी, क्योंकि आप डेटाबेस पर सत्यापन का आधार बनाएंगे और फिर उस फ़ॉर्मेट को सहेज लेंगे जो उस डेटा को ओवरराइट करता है जिसे आपने अभी उपयोग किया है चीजों को मान्य करें। असल में यह आपके सत्यापन को पीछे सहेजता है।

मुझे लगता है कि असली सवाल यहां पहले सहेजा जाता है। Int कोड को खोने के बाद, ऐसा लगता है कि व्यवस्थापक साइट ने पहले फ़ॉर्म को सेव किया था। इसका अर्थ यह है कि, तर्कसंगत रूप से, फ़ॉर्मेट पर सत्यापन करना और 'पैरेंट' उदाहरण तक पहुंचने से को लगातार मान प्राप्त करना चाहिए।

+0

अंत में, मैंने ऑर्डर्ड लिस्टरो इनलाइन के लिए एक फॉर्मेट बनाया और इसके स्वच्छ() फ़ंक्शन का ओवरराइड किया। इसमें, मैं साइट_आईडी = self.data.get ('साइट') 'साइट' साइट साइट का नाम होने के साथ माता-पिता ऑर्डर्डलिस्ट का उपयोग करके साइट आईडी खींचने में सक्षम था। अनिवार्य रूप से, मैं इसे सीधे फॉर्म डेटा से एक्सेस कर रहा हूं। एक बार जब मेरे पास सबमिट की गई साइट आईडी थी, तो मैं ऑर्डर्ड लिस्टरो फॉर्मेट के सभी रूपों के माध्यम से पुन: प्रयास कर सकता हूं, और उनकी सामग्री की साइट को ऑर्डर्डलिस्ट की साइट से तुलना कर सकता हूं। – KRH

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