保存問題可能類似於this one,但它不是...覆蓋Django上InlineModelAdmin
我有一個模型結構,如:
class Customer(models.Model):
....
class CustomerCompany(models.Model):
customer = models.ForeignKey(Customer)
type = models.SmallIntegerField(....)
我使用InlineModels
,並有兩種類型的CustomerCampany.type
。所以我定義爲CustomerCompany
2個不同勢在線和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好方法使用代理模型。我更新了我的答案,以解決您提到的最明顯的錯誤。這仍然留下了解決formset所代表的問題。 – Alasdair
實際上,代理模型方法消除了覆蓋'save_formset'的需要。代理本身已經重寫了'save'方法,知道如何將其保存爲正確的類型。所以,你只需使用內聯而不用擔心它。 –
我的評論是不明確的 - 我同意,即使是在'save_formset'('save_m2m'等)固定問題後,仍然有其內嵌的你保存的問題。我理解的是,代理模型方法避免了:) – Alasdair