Проблема с проверкой ModelForm - PullRequest
1 голос
/ 03 января 2011

Я использую ModelForm для создания моей формы. Все отлично работает, кроме 1 вещи - проверка уникальности поля. Код:

class Article(models.Model):
...
title = models.CharField(max_length=255, unique=True, error_messages={'max_length' : 'max translation',
                                                                                                    'unique' : 'unique translation',
                                                                                                    'required' : 'req translation',})
...

class ArticleForm(ModelForm):
...
title = forms.CharField(max_length=255, min_length=3, error_messages={'required' : 'req translation',
                                                                                             'min_length' : 'min translation',
                                                                                             'max_length' : 'max translation',
                                                                                             'unique' : 'unique translation',}) 

Но когда я сохраняю форму с неуникальным заголовком, я не получаю свою переведенную ошибку, но получаю ошибку по умолчанию. Как это исправить, чтобы отображалась моя уникальная ошибка поля?

EDIT: Я нашел, я думаю, очень удобный способ сделать это. Может быть, кто-то будет использовать это:)

def unique_error_message(self, model_class, unique_check):
    if 'put_field_name_here' in unique_check and len(unique_check) == 1:
        return 'Here goes a custom unique error'

    return super(Article, self).unique_error_message(model_class, unique_check)

1 Ответ

1 голос
/ 04 января 2011

Нет ключа unique для настройки сообщений проверки.Я бы сказал, что настраивать его не стоит, но если вам нужно, то поможет следующий подход:

import re
class ArticleForm(ModelForm):
    def clean(self, *args, **kwargs):
       result = super(ArticleForm, self).clean(*args, **kwargs)
       if self.non_field_errors:
           for i,msg in enumerate(self.non_field_errors):
               if re.match("^.+ already exists\.$", msg):
                   self.errors["__all__"][i] = custom_msg # Put your own text here
       return result

Это решение основано на недокументированных внутренних элементах Django, но пока что оно должно сработать.Опять же, я рекомендую придерживаться значения по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...