को बचाने यही सवाल this one के लिए इसी तरह लग सकता है, लेकिन इसकी नहीं ...अवहेलना Django InlineModelAdmin
मैं एक मॉडल संरचना है की तरह:
class Customer(models.Model):
....
class CustomerCompany(models.Model):
customer = models.ForeignKey(Customer)
type = models.SmallIntegerField(....)
मैं InlineModels
उपयोग कर रहा हूँ, और के दो प्रकार के CustomerCampany.type
। इसलिए मैं CustomerCompany
के लिए दो अलग अलग इनलाइन को परिभाषित करने और ओवरराइड OV InlineModelAdmin.queryset
class CustomerAdmin(admin.ModelAdmin):
inlines=[CustomerCompanyType1Inline, CustomerCompanyType2Inline]
class CustomerCompanyType1Inline(admin.TabularInline):
model = CustomerCompany
def queryset(self, request):
return super(CustomerCompanyType1Inline, self).queryset(request).filter(type=1)
class CustomerCompanyType2Inline(admin.TabularInline):
model = CustomerCompany
def queryset(self, request):
return super(CustomerCompanyType2Inline, self).queryset(request).filter(type=2)
सभी अच्छा और यहां तक अच्छा है, लेकिन InlineModelAdmin
के लिए नए रिकॉर्ड जोड़ने के लिए, मैं अभी भी AdminForm
पर CustomerCompany
की type
क्षेत्र प्रदर्शित करने के लिए की जरूरत है, के बाद से मैं एक InlineModelAdmin
की save
विधि ओवरराइड नहीं कर सकते की तरह:
class CustomerCompanyType2Inline(admin.TabularInline):
model = CustomerCompany
def queryset(self, request):
return super(CustomerCompanyType2Inline, self).queryset(request).filter(type=2)
#Following override do not work
def save_model(self, request, obj, form, change):
obj.type=2
obj.save()
एक संकेत का उपयोग करना भी एक समाधान मेरी संकेत के बाद से sender
ही 012 हो जाएगा नहीं है, तो मैं पहचान नहीं कर सकता जो InlineModelAdmin
इसे भेजने और type
क्या होना चाहिए ...
वहाँ एक रास्ता मुझे सेट type
क्षेत्र से पहले बचाने देंगे है?
+1 अच्छा दृष्टिकोण प्रॉक्सी मॉडल का उपयोग करने के लिए।मैंने आपके द्वारा वर्णित सबसे स्पष्ट गलतियों को ठीक करने के लिए अपना उत्तर अपडेट किया। यह अभी भी काम करने की समस्या को छोड़ देता है जो फ़ॉर्मेट का प्रतिनिधित्व करता है। – Alasdair
दरअसल, प्रॉक्सी मॉडल दृष्टिकोण 'save_formset' को ओवरराइड करने की आवश्यकता को हटा देता है। प्रॉक्सी स्वयं ने 'सेव' विधियों को ओवरराइड कर दिया है जो सही प्रकार के रूप में सहेजने के बारे में जानते हैं। तो, फिर आप इसके बारे में चिंता किए बिना इनलाइन का उपयोग करें। –
मेरी टिप्पणी स्पष्ट नहीं थी - मैं इस बात से सहमत था कि 'save_formset' ('save_m2m' आदि) में समस्याओं को ठीक करने के बाद भी, अभी भी उस समस्या का मुद्दा था जिसे आप सहेज रहे हैं। मुझे समझ में आया कि प्रॉक्सी मॉडल दृष्टिकोण से बचा जाता है :) – Alasdair