如何强制 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)
我有一个使用 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)