так что ... я бился головой об этом немного.Я получаю самую странную ошибку при попытке проверить форму.Я передаю ввод в форму, желающую проверить поведение, когда форма не проходит проверку, т.е. я ожидаю, что она не пройдет проверку.
У меня есть этот код для формы:
class CTAForm(forms.Form):
first_name = forms.CharField(max_length=50)
email = forms.EmailField()
phone = forms.CharField(max_length=15, required=False, label='Phone (optional)')
Ия делаю этот вызов где-то в представлении для обработки данных формы.
if cta_form.is_valid():
, и я получаю:
Exception Type: TypeError
Exception Value: 'str' object is not callable
Exception Location: /usr/lib/pymodules/python2.6/django/forms/forms.py in full_clean, line 246
Трассировка показывает это:
/ usr / lib / pymodules / python2.6 / django / forms / forms.py в full_clean:
- за исключением ValidationError, e:
- self._errors [name] = self.error_class (e.messages) ...
▼ Локальные переменные
Значение переменной
e: ValidationError ()
поле: django.forms.fields.EmailField объект в <0x225c4d0c>
name: 'email'
self: blah.views.CTAForm объект в <0x2245b42c>
value: u ''
Я чувствую себя довольно глупо.Кто-нибудь дает мне руководство по этому вопросу?спасибо.
редактировать: более полный код представления в соответствии с запросом
def cta_add(request):
context_dict = {'categories': Category.objects.all().order_by('order'),}
# we always expect to receive data via post
if request.method =='POST':
# get the current vid based on the parameter
current_vid = Video.objects.get(slug=request.POST['current_vid'])
# use this video to create our dynamic form so we get the valid cta values based on that video
cta_form_class = make_cta_form(current_vid.cta_set.all().order_by('order'))
# instantiate our new dynamic form based on the post data
cta_form = cta_form_class(request.POST, error_class='error')
# if we got this far, we were able to generate a form to validate the user's input against.
# If form validates, than process and take user to success screen
if cta_form.is_valid():
вспомогательная функция make_cta_form ниже
def make_cta_form(cta_set):
cta_list =[]
if not cta_set is None:
for cta in cta_set:
cta_list.append((cta.text, cta.text))
class CTAForm(forms.Form):
cta = forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple, choices=cta_list, label='', required=False)
first_name = forms.CharField(max_length=50)
email = forms.EmailField()
phone = forms.CharField(max_length=15, required=False, label='Phone (optional)')
return CTAForm