这可能是一个愚蠢的问题,但它让我很烦恼(我对django和python都很新)
在我的django应用程序中,我重写了模型的save()方法,以便在文件系统上执行某些交互。
我创建了一个这样的表单类:
class AddItemForm(ModelForm):
class Meta:
model = OriginalModel
所以,在我看来,当我调用form.save()时,eveything工作正常。
但是,在测试我的应用程序时,我希望能够调用原始的save()方法,以避免创建大量我不会使用并且必须处理的文件。
我尝试创建一个savebis()方法,以保留原始的save()方法,但是如何将它传递给ModelForm,以便我可以调用form.save()或form。 savebis()?
编辑:savebis()已经编写并在我的模型中工作。我希望能够从一个模型实例中调用它,但我不知道如何做到这一点。
答案 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()
方法。我建议不要走这条路,因为这会使代码变得比需要的更复杂。