0

这可能是一个愚蠢的问题,但它让我很困扰(我对 django 和 python 都很陌生)

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

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

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

因此,在我看来,当我调用 form.save() 时,一切工作正常。

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

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

编辑: savebis() 已经在我的模型中编写并工作。我希望能够从模型表单实例中调用它,但我不知道该怎么做。

4

1 回答 1

0

从您的问题来看,在我看来,您有一些可选的处理应该发生在Model's save 方法中。正如问题评论中所建议的,只需在测试期间使用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()方法。我建议不要走这条路,因为它会使代码比需要的更复杂。

于 2013-04-03T10:21:56.043 回答