2014-12-18 2 views
1

У меня есть модель 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) 

ответ

0

Вы исключили поле md5 в своем административном представлении? Это может быть вашей проблемой, поскольку md5 не получает проверку на уникальность в вашем представлении и выдает ошибку 50x. Если это так, вы можете использовать пользовательскую форму для своего ModelAdmin и проверить там поле md5.

+0

md5 появляется в Admin. Отредактирован исходный вопрос, чтобы показать конфигурацию администратора. – rgacote

+0

Извините, мой плохой; это не исключение поля, потому что вы устанавливаете значение в методе сохранения. – kaveh

+0

Тем не менее, вы можете использовать пользовательскую форму и генерировать свой md5 в своем чистом методе и улавливать ошибку там, а не делать это в методе сохранения. – kaveh

Смежные вопросы