避免在Django中使用ModelForm和m2m关系保存两次

时间:2016-03-12 23:35:47

标签: python django django-forms manytomanyfield

我有两个模特。

调用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)

0 个答案:

没有答案