2014-02-06 60 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