Django自定义保存抛出50倍而不是重复键错误

时间:2014-12-18 19:36:52

标签: django validation model save

我有一个Django模型,我想在自定义保存中自动填充另一个字段的md5。 它工作正常,直到在管理员中输入重复值,我得到50x错误抛出而不是重复错误消息。我期望md5字段上的unique = True来检查并捕获它。相反,我得到数据库唯一约束错误。感觉就像我错过了一些明显的东西,但我很困惑。有没有比保存更高的地方我应该检查这个?尝试了pre_save信号,但结果相同。

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)

1 个答案:

答案 0 :(得分:0)

您是否在管理视图中排除了md5字段?这可能是你的问题,因为你的视图中没有检查md5的唯一性,它会抛出50x错误。 如果是这种情况,您可以使用ModelAdmin的自定义表单并检查那里的md5字段。