django两次调用validate_unique - 解决方法?

时间:2014-02-06 11:06:28

标签: django django-models

我理解validate_unique仅在执行full_clean时被调用,而ModelForm.save()仅在调用validate_unique时调用 - 因此这意味着model_instance.save()将不会被自动调用在做validate_unique

例如。看到这个答案:https://stackoverflow.com/a/14472335/996792

想要在致电model_instance.save时致电save,所以我覆盖了我的模型的def save(self, *args, **kwargs): self.validate_unique() super(MyModel, self).save(*args, **kwargs) 功能,如下所示:

ModelForm

但是,这会产生以下怪癖:现在从validate_unique保存时(例如在管理员中),ModelForm.save()被调用两次!大概一次为Model.save(),一次为{{1}}。

无论如何都存在这种低效率?

我厌恶不必要的瑕疵,这种事情困扰着我。

1 个答案:

答案 0 :(得分:1)

这是一种可行的解决方法:

当请求来自modelform时调用

clean(方法,在调用此方法时设置标志:

def clean( self ):
    self.clean_called = True   #<---- this is the flag.
    #other model checks

覆盖save(我只有在没有设置标志的情况下才能调用validate_unique。别忘了删除旗帜。

def save(self, *args, **kwargs):
    flag_is_set = hasattr( self, 'clean_called' ) and self.clean_called
    if not flag_is_set:
        self.validate_unique()
    super(MyModel, self).save(*args, **kwargs)
    self.clean_called = False