2014-12-18 16 views
1

我有一個Django模型,我想在自定義保存中自動填充另一個字段的md5。 它工作正常,直到有一個重複的值輸入管理員,我得到一個50倍的錯誤拋出而不是重複的錯誤消息。我期望在md5字段上使用unique = True來檢查並捕獲這個字段。相反,我得到的數據庫唯一約束錯誤。感覺像我失去了一些明顯的東西,但感到困惑。有沒有比保存更高的地方我應該檢查這個?嘗試pre_save信號,但有相同的結果。Django自定義保存拋出50倍而不是重複鍵錯誤

class MailList(models.Model): 
    email = models.CharField(max_length=400, null=False, blank=False) 
    md5 = models.CharField(max_length=32, null=False, blank=True, unique=True) 

    def save(self, *args, **kwargs): 
     self.md5 = md5(self.email.strip().encode('UTF-8').lower()).hexdigest() 
     super(MailList, self).save() 

class MailListAdmin(admin.ModelAdmin): 
    readonly_fields = ('date_entered', 'date_modified',) 
    list_display = ('email', 
        'date_entered', 'date_modified', 'md5', 
        'subscriber',) 
    save_on_top = True 
    search_fields = ['email', ] 

admin.site.register(MailList, MailListAdmin) 

回答

0

您是否排除了管理視圖中的md5字段?這可能是你的問題,因爲md5沒有在你的視圖中檢查唯一性,它會拋出50x錯誤。 如果是這種情況,您可以爲您的ModelAdmin使用自定義表單並檢查該處的md5字段。

+0

md5確實出現在管理員中。編輯原始問題以顯示管理員配置。 – rgacote

+0

對不起,我的壞話;這不是關於排除字段,因爲您正在設置保存方法中的值。 – kaveh

+0

不過,您可以使用自定義窗體並在其clean方法中生成您的md5,並在那裏捕獲錯誤,而不是在save方法中執行。 – kaveh

相關問題