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