我有两个模特。
调用MyModelForm.save
函数时,我想创建MyOtherModel
的实例并向其添加MyModel
。为此,我需要先在save
实例的MyModelForm.save
中调用MyModel
,否则无法将其添加到MyOtherModel
。
问题是MyModel.save
被调用两次,因为从MyModelForm.save
返回实例时会再次调用它。
如何在不调用保存两次的情况下使此代码正常工作?
PS。许多人不明白为什么我这样做,但我隐藏了许多细节以得到一个最小的例子。
admin.py
def do_something(instance):
foo = MyOtherModel.objects.create()
foo.models.add(instance)
class MyModelForm(forms.ModelForm):
def save(self, *args, **kwargs):
instance = super().save(*args, **kwargs)
instance.save()
do_something(instance)
return instance
@admin.register(MyModel)
class MyModelAdmin(admin.ModelAdmin):
form = MyModelForm
models.py
class MyModel(models.Model):
...
def save(self, *args, **kwargs):
print('calling save in instance') # Called twice
return super().save(*args, **kwargs)
class MyOtherModel(models.Model):
models = models.ManyToManyField(MyModel)