我有一个使用Django内联管理员的应用程序。
from django.db import models
class MyClass(models.Model):
field1 = models.CharField(max_length=128)
fieldN = models.IntegerField()
class MyInlineClass(models.Model):
field1 = models.CharField(max_length=128)
field2 = models.ForeignKey(MyClass)
fieldN = models.IntegerField()
def save(self, force_insert=False, force_update=False, using=None, update_fields=None):
if self.field2:
self.field1 = self.field2.field1
return BaseModel.save(self, force_insert=force_insert, force_update=force_update, using=using, update_fields=update_fields)
由于我无法控制的原因,在MyClass和MyInlineClass中重复了fieldN。
因此,用户必须更改MyClass和每个内联上的fieldN。
我希望在更改管理类的字段N时在内联中保存fieldN。
from django.contrib import admin
class MyInlineClassInline(admin.TabularInline):
model = MyInlineClass
fields = ['field2']
class MyClassAdmin(admin.ModelAdmin):
inlines = [MyInlineClassInline,]
如果我覆盖MyClass保存方法,我怎么能强制调用MyInlineClass保存方法?
有什么想法吗?
答案 0 :(得分:0)
我已经解决了覆盖MyClass的保存方法的问题:
class MyClass(BaseModel):
field1 = models.CharField(max_length=128)
fieldN = models.IntegerField()
def save(self, force_insert=False, force_update=False, using=None, update_fields=None):
BaseModel.save(self, force_insert=force_insert, force_update=force_update, using=using, update_fields=update_fields)
if (MyInlineClass.objects.filter(field2=self.pk).first()):
for myinlineclass in MyInlineClass.objects.filter(field2=self.pk):
MyInlineClass.save(myinlineclass, force_insert, force_update, using, update_fields)
return BaseModel.save(self, force_insert=force_insert, force_update=force_update, using=using, update_fields=update_fields)