Bootstrap3 inline forms в django-crispy-forms не показывает ошибок формы
Я использую в Django-хрустящие-форм оказать Bootstrap3 встраиваемая форма (код показан ниже), но ошибки при отправке формы (например, пропуск обязательных полей) не отображаются. Они делают в нормальных и горизонтальных макетах формы.
кто-нибудь может предположить возможную причину(ы)?
Models.py
class Person(models.Model):
name = models.CharField(max_length=500)
city = models.CharField(max_length=50)
country = models.CharField(max_length=50)
email = models.EmailField(blank=True)
Forms.py
class EntryForm(forms.ModelForm):
class Meta:
model = Person
def __init__(self, *args, **kwargs):
super(EntryForm, self).__init__(*args, **kwargs)
self.helper = FormHelper(self)
self.helper.form_class = 'form-inline'
self.helper.field_template = 'bootstrap3/layout/inline_field.html'
self.helper.layout.append(ButtonHolder(
Submit('save', 'Save', css_class='btn-primary btn-hg')
)
)
Я использую {% load crispy_forms_tags %}
и {% crispy form %}
в моем шаблоне.
2 ответов
причина в том, что поле inline_field.HTML шаблон, который вы используете, не имеют кода для отображения ошибок.
пожалуйста, сравните нормальный bootstrap3/поле.html для встроенной версии. Вы заметите, что
{% include 'bootstrap3/layout/help_text_and_errors.html' %}
отсутствует в последних. После того, как вы измените встроенный на что-то вроде ниже, у вас будут сообщения об ошибках.
{% load crispy_forms_field %}
{% if field.is_hidden %}
{{ field }}
{% else %}
{% if field|is_checkbox %}
<div id="div_{{ field.auto_id }}" class="checkbox">
<label for="{{ field.id_for_label }}" class="{% if field.field.required %} requiredField{% endif %}">
{% crispy_field field 'class' 'checkbox' %}
{{ field.label|safe }}
{% include 'bootstrap3/layout/help_text_and_errors.html' %}
</label>
</div>
{% else %}
<div id="div_{{ field.auto_id }}" class="form-group">
<label for="{{ field.id_for_label }}" class="sr-only{% if field.field.required %} requiredField{% endif %}">
{{ field.label|safe }}
</label>
{% crispy_field field 'placeholder' field.label %}
{% include 'bootstrap3/layout/help_text_and_errors.html' %}
</div>
{% endif %}
{% endif %}
конечно, сообщения об ошибках довольно уродливы (поскольку они исходят из обычной версии), поэтому вам, вероятно, придется создать встроенная версия bootstrap3/layout/help_text_and_errors.html
. Также некоторые error
могут потребоваться классы css-см. поле.формат html.
Ниже приведена текущая конфигурация для моих проектов. Я думаю, это может сработать и для тебя.
#forms.py
from crispy_forms.helper import FormHelper
from crispy_forms.layout import Submit, Layout, Div
from crispy_forms.bootstrap import FormActions
from myapp.models import Person
class EntryForm(forms.ModelForm):
class Meta:
model = Person
def __init__(self, *args, **kwargs):
super(EntryForm, self).__init__(*args, **kwargs)
self.helper = FormHelper()
self.helper.form_id = 'id-entryform'
self.helper.form_class = 'form-inline'
self.helper.form.method = 'post'
self.helper.form.action = ''
self.helper.layout = Layout(
Div('name','email'),
Div('country','city'),
FormActions(Submit('save', 'Save', css_class='btn-primary btn-hg')
)
)