मेरे पास मॉडल मॉडल पर समान एम 2 एम फ़ील्ड के साथ दो मॉडल (मॉडलपेरेंट और मॉडल चाइल्ड) हैं। मॉडल चाइल्ड मॉडलपैंट पर एक विदेशी कुंजी है और मॉडल चाइल्ड को व्यवस्थापक पृष्ठ पर मॉडलपेरेंट के लिए इनलाइन के रूप में परिभाषित किया गया है।django - मॉडलएडमिन और इसकी इनलाइनों को कैसे पार करें?
### models.py ###
class Subject(Models.Model):
pass
class ModelParent(models.Model):
subjects_parent = ManyToManyField(Subject)
class ModelChild(models.Model):
parent = ForeignKey(ModelParent)
subjects_child = ManyToManyField(Subject)
### admin.py ###
class ModelChildInline(admin.TabularInline):
model = ModelChild
class ModelParentAdmin(admin.ModelAdmin):
inlines = [ModelChildInline]
admin.site.register(ModelParent, ModelParentAdmin)
मैं एक महत्वपूर्ण प्रतिबंध हालांकि है, ModelChild के subjects_child क्षेत्र किसी भी विषय है कि subject_parent अपने subjects_parent के साथ करता है को संदर्भित नहीं करना चाहिए।
तो, यदि मैं दोनों मॉडलों के लिए व्यवस्थापक पृष्ठ पर एक ही विषय (subject_parent और subject_child में) का चयन करता हूं, तो मैं इसे कैसे सत्यापित कर सकता हूं? यदि केवल एक फ़ील्ड बदलता है तो आप इसे डीबी के खिलाफ मान्य करते हैं, लेकिन क्या होगा यदि दोनों बदलते हैं (subject_parent और subject_child)? बचत से पहले दोनों रूपों को एक साथ कैसे सत्यापित कर सकता हूं?
फॉर्म के लिए स्वच्छ() में इसे मान्य क्यों न करें, फ़ील्ड_ स्पेसिफिक क्लीन नहीं? इस तरह, आपको जिन क्षेत्रों को जांचना होगा, उन्हें पहले से साफ़ कर दिया जाएगा। केवल एक चीज मुझे यकीन नहीं है कि क्या आप डेटा के दोनों सेट तक पहुंच सकते हैं, या केवल मॉडल में माता-पिता के लिए डेटा() ... –
सुझाव के लिए Thx। मैंने पहले से ही ऐसा किया है, लेकिन रूपों के साथ मैं केवल मुख्य रूप (मॉडलपेरेंट एडमिन के लिए फॉर्म) को मान्य कर सकता हूं और फॉर्मेट को अलग-अलग (केवल डीबी के खिलाफ) में जोड़ सकता हूं। एकमात्र जगह जो मैं उन्हें एक साथ एक्सेस कर सकता हूं वह ModelParentAdmin क्लास में है। लेकिन उस वर्ग में एक साफ() विधि नहीं है। मैं इस वर्ग की save_formsets (...) विधि में svaing से पहले उन्हें मान्य कर सकता हूं, लेकिन raise पर प्रमाणीकरण त्रुटि ("त्रुटि") कुछ भी इसे पकड़ नहीं लेता है। – blazt