I have an app who uses 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)
For reasons beyond my control, the fieldN is repeated in MyClass and in MyInlineClass.
So the user has to change the fieldN on MyClass and on eachone of the inlines.
I want to save fieldN on the inline when changing fieldN on my admin class.
from django.contrib import admin
class MyInlineClassInline(admin.TabularInline):
model = MyInlineClass
fields = ['field2']
class MyClassAdmin(admin.ModelAdmin):
inlines = [MyInlineClassInline,]
If I override the MyClass save method, how could I force to call MyInlineClass save method also?
Any thoughts?
I've solved overriding the save method of MyClass like this:
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)