2012-03-02 17 views
5

Tengo un formulario que falla la prueba is_valid(). Creé una forma idéntica que pasa la prueba con la misma entrada de datos. No estoy seguro de por qué uno pasaría y uno fallaría.Formulario de Django no válido

Estas son las formas:

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}) 
    ) 

Aquí está la prueba y los resultados para los dos.

>>> data = {'name':'test', 
...   'url': 'www.test.com', 
...   'desc':'test desc', 
...   'created': '01/01/1900', 
...   'priority':1, 
...   'difficulty':1, 
...   'desc':'test desc', 
...   'tags':'test desc'} 
>>> f=ActivitySaveForm(data) 
>>> f.is_valid() 
False 
>>> f=AcTest(data) 
>>> f.is_valid() 
True 

No estoy seguro de cómo diagnosticar aún más este error y no he encontrado la manera de hacerlo funcionar. Gracias por tu ayuda en esto.

Respuesta

8

que corrieron en su código y para mí, ambas formas no pueden validar. Puede hacer esto: print f.errors y obtendrá el HTML de los mensajes de error que se crearon durante la validación.

Por esta me sale:

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

Así, en otras palabras, no se ha especificado un valor para el campo 'hecho', a pesar de que se requiere. Una vez que agrega 'done':1 al diccionario data, el formulario valida.

En cuanto a por qué una forma validada y la otra no ... Yo pego todo esto en un solo programa pequeño, probablemente encontrará que ambos se comportan de la misma manera. Solo puedo especular que por alguna razón no pasaste la misma información en ambos casos. O que cuando hiciste la prueba hubo una sutil diferencia en los formularios. Pero no puedo estar seguro.

En cualquier caso, intente imprimir los errores y debe obtener una visión.

+0

Gracias jbrendel. desconcertado. Ese fue el problema. – jabs

Cuestiones relacionadas