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)
md5確實出現在管理員中。編輯原始問題以顯示管理員配置。 – rgacote
對不起,我的壞話;這不是關於排除字段,因爲您正在設置保存方法中的值。 – kaveh
不過,您可以使用自定義窗體並在其clean方法中生成您的md5,並在那裏捕獲錯誤,而不是在save方法中執行。 – kaveh