Неверная форма Джанго - PullRequest
       10

Неверная форма Джанго

6 голосов
/ 02 марта 2012

У меня есть форма, которая не проходит тест is_valid().Я создал идентичную форму, которая проходит тест с тем же вводом данных.Не уверен, почему кто-то пройдет, а кто-то потерпит неудачу.

Вот формы:

choices = ( (1,'Yes'),(0,'No'),
      )

class ActivitySaveForm(forms.Form):
    name = forms.CharField(
        label=u'Activity Name',
        widget=forms.TextInput(attrs={'size': 64})
    )
    url = forms.URLField(
        label=u'URL',
        widget=forms.TextInput(attrs={'size': 64})
    )
    desc = forms.CharField(
        label=u'Describe it',
                widget=forms.TextInput(attrs={'size': 250})
    )
    created = forms.DateField(
        label=u'Date Entered',initial=datetime.date.today,
    )
    priority = forms.CharField(
        label=u'priority: 1-5',
            widget=forms.TextInput(attrs={'size': 1})
    )
    difficulty = forms.CharField(
        label=u'How hard is it? 1-5',
            widget=forms.TextInput(attrs={'size': 1})
    )
    done = forms.TypedChoiceField(choices=choices, widget=forms.RadioSelect, coerce=int
    )   
    tags = forms.CharField(
        label=u'Tags',required=False,
            widget=forms.TextInput(attrs={'size': 64})
    )
#def __init__(self, *args, **kwargs):
    #super(CircuitForm, self).__init__(*args, **kwargs)

    #for key in self.fields:
        #self.fields[key].required = False


class AcTest(forms.Form):
    name = forms.CharField(
        label=u'Activity Name',
        widget=forms.TextInput(attrs={'size': 64})
    )
    url = forms.URLField(
        label=u'URL',
        widget=forms.TextInput(attrs={'size': 64})
    )
    desc = forms.CharField(
        label=u'Describe it',
                widget=forms.TextInput(attrs={'size': 250})
    )
    created = forms.DateField(
        label=u'Date Entered',initial=datetime.date.today,
    )
    priority = forms.CharField(
        label=u'priority: 1-5',
            widget=forms.TextInput(attrs={'size': 1})
    )
    difficulty = forms.CharField(
        label=u'How hard is it? 1-5',
            widget=forms.TextInput(attrs={'size': 1})
    )
    done = forms.TypedChoiceField(choices=choices, widget=forms.RadioSelect, coerce=int
    )   
    tags = forms.CharField(
        label=u'Tags',required=False,
            widget=forms.TextInput(attrs={'size': 64})
    )

Вот тест и результаты для обоих.Не уверен, как дальше диагностировать эту ошибку и не нашел способ заставить ее работать.Спасибо за вашу помощь в этом.

Ответы [ 2 ]

10 голосов
/ 02 марта 2012

Я запустил ваш код, и для меня обе формы не прошли проверку.Вы можете просто сделать это: print f.errors и вы получите HTML-код для сообщений об ошибках, которые были созданы во время проверки.

Для этого я получаю:

<ul class="errorlist"><li>done<ul class="errorlist"><li>This field is required.</li></ul></li></ul>

Другими словами, вы не указали значение для поля «готово», хотя оно и было обязательным.После добавления 'done':1 в словарь data форма проверяется.

Почему одна форма проверена, а другая нет ... Если вы вставляете все это в одну небольшую программу, выВозможно, вы обнаружите, что они оба ведут себя одинаково.Я могу только предположить, что по некоторым причинам вы не передали одни и те же данные в обоих случаях.Или что, когда вы запустили тест, в формах была небольшая разница.Но я не могу быть уверен.

В любом случае, попробуйте распечатать ошибки, и вы должны получить представление.

2 голосов
/ 02 марта 2012

Вы должны быть в состоянии проверить ошибки формы. Что-то вроде этого может помочь вам увидеть ошибки. (Извините, это не проверено)

https://docs.djangoproject.com/en/dev/topics/forms/#customizing-the-form-template

>>> f = ActivitySaveForm(data)
>>> f.non_field_errors()
>>> field_errors = [ (field.label, field.errors) for field in f] 
...