保存问题可能类似于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