Django - 调用原始和重写保存方法

时间:2013-04-03 08:57:23

标签: python django

这可能是一个愚蠢的问题,但它让我很烦恼(我对django和python都很新)

在我的django应用程序中,我重写了模型的save()方法,以便在文件系统上执行某些交互。

我创建了一个这样的表单类:

class AddItemForm(ModelForm):
    class Meta:
        model = OriginalModel

所以,在我看来,当我调用form.save()时,eveything工作正常。

但是,在测试我的应用程序时,我希望能够调用原始的save()方法,以避免创建大量我不会使用并且必须处理的文件。

我尝试创建一个savebis()方法,以保留原始的save()方法,但是如何将它传递给ModelForm,以便我可以调用form.save()或form。 savebis()?

编辑:savebis()已经编写并在我的模型中工作。我希望能够从一个模型实例中调用它,但我不知道如何做到这一点。

1 个答案:

答案 0 :(得分:0)

从你的问题来看,听起来像你有一些可选的处理应该在Model的保存方法中进行。根据问题评论中的建议,只需在测试期间使用的TESTING = True文件中添加settings.py类型常量,并使用Model save方法检查此值:

from django.conf import settings

class OriginalModel(Model):
    ...
    def save(self, *args, **kwargs):
        if not settings.TESTING:
            # Do some file system interaction, but not during testing.
            pass
        # Now save instance as per normal.
        return super(originalModel, self).save(*args, **kwargs)

如果您沿着覆盖ModelForm save方法的路径走,那么您必须复制ModelForm save方法的现有功能,并将其更改为打电话给您模型的savebis()方法而不是save()方法。我建议不要走这条路,因为这会使代码变得比需要的更复杂。