2014-02-06 44 views
1

我明白validate_uniquefull_clean,这又只是调用ModelForm.save()当调用时,才会调用 - 这样就意味着validate_unique不会自动被调用做一个model_instance.save()django两次调用validate_unique - 解决方法?

例如当。看到这样的回答:https://stackoverflow.com/a/14472335/996792

要调用model_instance.save所以我重写我的模型的save功能时调用validate_unique如下:保存时现:

def save(self, *args, **kwargs): 
    self.validate_unique() 
    super(MyModel, self).save(*args, **kwargs) 

然而,这会产生以下怪癖从ModelForm(例如在管理员中),validate_unique被调用两次!推测一次为ModelForm.save(),一次为Model.save()

无论如何围绕这种低效率?

我讨厌不必要的残酷,这种事情困扰着我。

回答

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