У меня есть модель Django, где я хочу автоматически заполнить md5 другого поля в пользовательском сохранении. Он работает нормально до тех пор, пока в Admin не будет введено дублирующее значение, я получаю 50-кратную ошибку, а не сообщение Duplicate Error. Я ожидал уникальный = True в поле md5, чтобы проверить и поймать это. Вместо этого я получаю ошибку ограничения уникальной базы данных. Похоже, я пропускаю что-то очевидное, но недоумеваю. Есть ли где-то выше, чем сохранить, я должен проверить это? Пробовал сигнал pre_save, но имел тот же результат.Django custom save throws 50x вместо дублированной ошибки ключа
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 появляется в Admin. Отредактирован исходный вопрос, чтобы показать конфигурацию администратора. – rgacote
Извините, мой плохой; это не исключение поля, потому что вы устанавливаете значение в методе сохранения. – kaveh
Тем не менее, вы можете использовать пользовательскую форму и генерировать свой md5 в своем чистом методе и улавливать ошибку там, а не делать это в методе сохранения. – kaveh