2015-02-16 3 views
3

У меня есть простой вид в приложении django, который я хочу показать только в том случае, если одна из форм действительна. У меня есть что-то вроде:Django form возвращает is_valid() = False и без ошибок

@login_required 
@require_role('admin') 
def new_package(request): 
    invoicing_data_form = InvoicingDataForm(instance=request.user.account.company.invoicingdata) 
    if invoicing_data_form.is_valid(): 
     # all here 
     return HttpResponse('Form valid') 
    else: 
     logger.info("Form invalid") 
     return HttpResponse(json.dumps(invoicing_data_form.errors) 

Я всегда получаю журнал информационные сообщения, что форма является недействительным, однако, я не получаю ничего в

invoicing_data_form.errors 

Это очень странно, потому что я проверки этой формы в других целях используя пользовательские входные данные, и он работает просто отлично. Есть идеи?

EDIT: Просто для уточнения. Я не запрашиваю данные у пользователя в этой форме. Я использую эту форму для проверки экземпляра модели (эта форма является подклассом из ModelForm).

+0

Прежде всего, вам нужно проверить форму сообщения. – karthikr

+0

Почему? Я не отправляю никаких данных через POST. Я просто хочу проверить форму (ModelForm) с помощью экземпляра модели. – dease

ответ

13

Это потому, что вы не «кормите» вашу форму.

ли это:

invoicing_data_form = InvoicingDataForm(instance=invoice, data=request.POST or None) 
+0

Я добавил это, но форма все еще недействительна :( – dease

+0

да, но теперь вы должны иметь возможность проверять ошибки –

+0

invoicing_data_form.errors ничего не возвращает :( – dease

6

Вы несвязанный форму. https://docs.djangoproject.com/en/1.7/ref/forms/api/#bound-and-unbound-forms

экземпляр формы, либо связанный с набором данных, или несвязанным.

Если это связанный с набором данных, он способен проверять эти данные и визуализировать форму как HTML с данными, отображаемыми в HTML.

Если это unbound, он не может выполнить проверку (потому что нет данных для проверки!), Но он все равно может отображать пустую форму как HTML.

Для привязки данных к форме, передать данные в виде словаря в качестве первого параметра в форме конструктора класса:

invoicing_data_form = InvoicingDataForm(request.POST or None, instance=invoice) 
+1

В этом представлении я хочу только проверить форму, я не запрашиваю никаких данных от пользователя. Вот почему я предоставляю экземпляр объекта форме (которая является экземпляром класса ModelForm). Вы уверены, что мне нужно предоставить данные? Даже если это так, когда я добавил это, я все равно получаю неверное сообщение формы, и ошибок нет вообще – dease

1

Если вы уже даете request.POST в форму используя request.POST or None, но он по-прежнему недействителен без ошибок, проверьте, не происходит ли переадресация. Переадресация теряет ваши данные POST, и ваша форма будет недействительной без ошибок, поскольку она не связана.

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