在Django的InlineModelAdmin中覆盖保存操作
在Django的InlineModelAdmin中覆盖保存操作
这个问题看起来可能与这个问题相似,但实际上并不相同...
我有一个模型结构如下:
class Customer(models.Model): .... class CustomerCompany(models.Model): customer = models.ForeignKey(Customer) type = models.SmallIntegerField(....)
我正在使用InlineModels
,并且有两种不同的CustomerCompany.type
。因此,我为CustomerCompany
定义了两个不同的内联,并重写了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) #以下重写不起作用 def save_model(self, request, obj, form, change): obj.type=2 obj.save()
使用信号也不是一个解决方案,因为我的信号sender
将是相同的Model
,所以我无法检测到是哪个InlineModelAdmin
发送的信号,以及应该是什么type
。
是否有一种方法可以在保存之前设置type
字段?