Django: представление на основе классов не может отображать четкую форму

Привет, люди Stackoverflow,

У меня проблемы с отображением хрустящей формы с представлением на основе классов. Все работало нормально, когда я использовал представления на основе функций.

Как обычно, я генерирую forms.py следующим образом:

from django import forms    
from crispy_forms.helper import FormHelper
from crispy_forms.layout import Layout, Div, Submit, HTML, Button, Row, Field
from item.models import Item

class CreateItemForm(forms.ModelForm):
    class Meta:
        model = Item
        exclude = ('user',)

        def __init__(self, *args, **kwargs):
            self.helper = FormHelper()
            self.helper.form_tag = False
            self.helper.form_class = 'form-horizontal'
            self.helper.layout = Layout(
                Fieldset(
                    'Create your item here',
                    'name', 'description', 
                    'save',
                ),
            )
            self.request = kwargs.pop('request', None)
            return super(CreateItemForm, self).__init__(*args, **kwargs)

Функция просмотра очень проста и стандартна:

from django.views.generic.edit import CreateView,
from item.models import Item
from item.forms import CreateItemForm

class ItemCreate(CreateView):
    form_class = CreateItemForm
    model = Item
    template_name = 'item/item_create_form.html' 

и шаблон также следует минимальным инструкциям:

{% extends "base.html" %}
{% load crispy_forms_tags %}
{% block content %}
<h2>Create new Item</h2>
            <form action="." class="crispy form-horizontal" method="post">
                {% crispy form form.helper %}
            </form>
{% endblock %}

Моя проблема в том, что Django будет жаловаться «VariableDoesNotExist at /item/add/, Failed lookup for key [helper] in ...".

Совместимы ли четкие формы с представлениями на основе классов? Как передать вспомогательную информацию для правильного создания формы?

Спасибо за вашу помощь и предложения.


person neurix    schedule 21.08.2012    source источник
comment
Можете ли вы предоставить больше данных о трассировке?   -  person yedpodtrzitko    schedule 21.08.2012
comment
Привет, Нихал, похоже, что другой пост новее (всего 15 дней). Это было опубликовано 8 месяцев назад.   -  person neurix    schedule 10.01.2014


Ответы (3)


конструктор в вашей форме имеет слишком отступ, таким образом, он принадлежит классу Meta формы, но он должен быть непосредственно в CreateItemForm

person yedpodtrzitko    schedule 21.08.2012
comment
Спасибо за ваш ответ. Да, отступ был проблемой. Но теперь отображается полная форма, а не только выбранные поля (имя, описание). Как я могу заставить хрустящую форму сфокусироваться на полях в наборе полей? - person neurix; 21.08.2012
comment
это еще одна проблема, но попробуйте удалить exclude из класса Meta формы - person yedpodtrzitko; 21.08.2012
comment
Спасибо за предложение, но оно не сработало. Тем не менее отображается полная форма. В качестве быстрого решения я объявил fields = ... в Meta, но таким образом я не могу изменить внешний вид полей формы. Спасибо за помощь! - person neurix; 21.08.2012

используйте это вместо показа исключения

fields ('field1','field2','field3')

здесь замените field1 и field2 и field3 именами ваших полей. который вы хотите показать. Это работает для меня.

person numerah    schedule 26.04.2013

Что меня укусило, я оставил

{{ форма|хрустящая}}

Вместо того, чтобы использовать

% хрустящая форма %}

Первый будет генерировать только представления общего класса Django.

person kenyee    schedule 26.05.2015