django调用validate_unique两次-解决方法?
我知道只有在执行django调用validate_unique两次-解决方法?,django,django-models,Django,Django Models,我知道只有在执行full\u clean时才会调用validate\u unique,而只有在调用ModelForm.save()时才会调用validate\u unique,这意味着在执行model\u实例时不会自动调用save() 看看这个答案: 我确实想在调用model\u实例时调用validate\u unique。save因此我覆盖了我的模型的save函数,如下所示: def save(self, *args, **kwargs): self.validate_unique()
full\u clean
时才会调用validate\u unique
,而只有在调用ModelForm.save()
时才会调用validate\u unique
,这意味着在执行model\u实例时不会自动调用save()
看看这个答案:
我确实想在调用model\u实例时调用validate\u unique
。save
因此我覆盖了我的模型的save
函数,如下所示:
def save(self, *args, **kwargs):
self.validate_unique()
super(MyModel, self).save(*args, **kwargs)
但是,这会产生以下怪癖:现在从模型表单
保存时(例如在管理中),验证\u unique
被调用两次!大概一次用于ModelForm.save()
,一次用于Model.save()
这种低效率到底有什么原因吗
我讨厌不必要的粗陋,这类事情让我烦恼。这是一个可能的解决办法:
clean(
当请求来自modelform时调用方法,当调用此方法时设置标志:
def clean( self ):
self.clean_called = True #<---- this is the flag.
#other model checks
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