2012-04-22 1 views
0

С помощью этой простой моделиОтображение ошибок в верхней части страницы, в порядке полей

class Publisher(models.Model): 
    name = models.CharField(max_length = 40) 
    website = models.URLField() 

    def __unicode__(self): 
     return self.name 

и формы модели

class PublisherForm(ModelForm): 

    class Meta: 
     model = Publisher 

Обновлено Модель

class PublisherForm(ModelForm): 
    error_css_class = "error" #class is applied if the field throws an error. 
    required_css_class = "required" #outputs the cell with the class if the field is required 

    def __init__(self, *args, **kwargs): 
     super(PublisherForm, self).__init__(*args, **kwargs) 
     self.fields.keyOrder = ['name', 'website'] 

    class Meta: 
     model = Publisher 

себе .fields.keyOrder не влияет на порядок сообщений об ошибках. Он изменяет только порядок полей.

Порядок полей, генерируемых form.as_table в порядке их был объявлен в модели

Я побежал этот код в оболочке

from booksapp import models 
>>> f = models.PublisherForm({}) 
>>> f.is_valid() 
False 
>>> f.as_table() 
u'<tr class="required error"><th><label for="id_name">Name:</label></th><td><ul class="errorlist"><li>This field is required.</li></ul><input id="id_name" type="text" name="name" maxlength="40" /></td></tr>\n<tr class="required error"><th><label for="id_website">Website:</label></th><td><ul class="errorlist"><li>This field is required.</li></ul><input id="id_website" type="text" name="website" maxlength="200" /></td></tr>' 
>>> f.errors 
{'website': [u'This field is required.'], 'name': [u'This field is required.']} 
>>> 

Здесь порядок HTML является правильные в соответствии с моделью, но порядок ошибок - нет. Я думаю, что имя должно быть первым.

Это будет проблемой, если мне нужно вывести ошибки выше формы, а не встроенные.

Как получить порядок сообщений об ошибках таким же, как поля в модели? Что вы будете делать, если вам придется отображать сообщения об ошибках вверху?

ответ

1

Вам необходимо указать go through the form's data to get the field order, а затем вы получите доступ к соответствующим элементам словаря ошибок.

+0

Он не влияет на порядок сообщений об ошибках. Он меняет порядок полей. Любой способ отображать сообщения об ошибках в том же порядке, что и поля? – iJK

+0

Мне нужно знать, что вы пытались, поэтому я могу сказать вам, что вы сделали неправильно. –

+0

Я добавил метод __init__ в форму модели PublisherForm и выполнил те же команды в оболочке. – iJK

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