2014-12-19 2 views
1

Почему это не работает? (Django 1.7 и django-crispy-forms 1.4.0)Django crispy-forms wrap все не работает

Класс css не применяется.

class ResourceForm(ModelForm): 

def __init__(self, *args, **kwargs): 
    super(ResourceForm, self).__init__(*args, **kwargs) 
    self.helper = FormHelper(self) 
    self.helper.layout = Layout() 
    self.helper.add_input(Submit('submit', 'Submit')) 
    self.helper.all().wrap(Field, css_class="col-xs-3 col-sm-4") 


class Meta: 
    model = Resource 
    fields = ['title', 
       '.... 

И тогда форма HTML:

{% load crispy_forms_tags %} 

{% block content %} 
<div class="col-xs-12 col-sm-12 main_column"> 
    {% crispy form form.helper %} 
</div> 

{% endblock %} 

Форма HTML сгенерированные выглядит следующим образом:

<form method="post" enctype="multipart/form-data"> 
    <input type='hidden' name='csrfmiddlewaretoken' value='blaahblahblah...' /> 
    <div id="div_id_title" class="form-group"> 
     <label for="id_title" class="control-label requiredField"> 
      Title<span class="asteriskField">*</span> 
     </label> 
     <div class="controls "> 
      <input class="textinput textInput form-control" id="id_title" maxlength="255" name="title" type="text" value="Foo" /> 
     </div> 
    </div> 
.... 
</form> 

То есть, нормальный HTML для ModelForm. Обратите внимание, что я использую forms.ModelForm, а не forms.Form.

+0

Что HTML код делает это в настоящее время генерировать? Благодарю. – alecxe

+0

Я добавлю сгенерированный html к вопросу выше. –

+0

Что делать, если вы заменили 'FormHelper (self)' на 'FormHelper()'? – alecxe

ответ

4

При вызове FormHelper с формой прошедшего в

self.helper = FormHelper(self) 

она автоматически создает макет со всеми полями включены как это (see the code):

def __init__(self, form=None): 
    self.attrs = {} 
    self.inputs = [] 

    if form is not None: 
     self.form = form 
     self.layout = self.build_default_layout(form)  

Но тогда, когда вы звоните

self.helper.layout = Layout() 

вы его уничтожаете. Поэтому у вас нет полей для обертывания.

Решение: удалить строку self.helper.layout = Layout()

+0

Это тот, спасибо @twil. –

+0

Это ответ, но документы, похоже, полностью противоречат ему. См. http: // django-crispy-forms. readthedocs.org/en/d-0/dynamic_layouts.html?highlight=wrap#all –

+0

Хм, что именно выглядит вам нехорошо? Кажется, все в порядке. – twil

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