如何强制 Django Admin 保存内联?

How to force Django Admin to save the inline?

我有一个使用 Django Inline Admin 的应用程序。

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)

由于我无法控制的原因,字段 N 在 MyClass 和 MyInlineClass 中重复出现。

因此用户必须更改 MyClass 和每个内联中的字段 N。

我想在我的管理员上更改 fieldN 时将 fieldN 保存在内联 class。

from django.contrib import admin

class MyInlineClassInline(admin.TabularInline):
    model = MyInlineClass
    fields = ['field2']

class MyClassAdmin(admin.ModelAdmin):
    inlines = [MyInlineClassInline,]

如果我覆盖了 MyClass 保存方法,我怎么能强制调用 MyInlineClass 保存方法?

有什么想法吗?

我已经解决了重写 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)