我理解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}}。
无论如何都存在这种低效率?
我厌恶不必要的瑕疵,这种事情困扰着我。
答案 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