Сообщение об ошибке не отображается с хрустящими формами и начальной загрузкой 3

Сегодня я потратил несколько часов на попытки поиска в Google, но не могу найти решение своей проблемы:

Я использую хрустящие формы в версии 1.4.0 и Bootstrap3. У меня есть CreateView, как показано ниже, который отображает форму с помощью четких форм. Исходники для Bootstrap3, похоже, тоже загружаются. Необходимо ввести имя в поле.

Независимо от того, что я ввожу в эти три поля (или оставляю их полностью пустыми), форма перезагружается каждый раз, когда я нажимаю кнопку «Сохранить». Сообщение об ошибке не появляется (например, для обязательного поля имени). Кажется, это связано с хрустящими формами. Потому что, если я оставлю хрустящие формы, я получу сообщение «это поле обязательно» над полем имени.

Я просто не понимаю: что мне здесь не хватает? Я наткнулся на этот пост, но это не совсем подходит для моего случая, так как я не использую переменную self.helper.field_template.

models.py

class SomeItem(models.Model):
    name = models.CharField(_('Some item name'), max_length=30)
    longitude = models.DecimalField(_('Longitude'), max_digits=9, decimal_places=7, blank=True, null=True,
                                help_text=_('Longitude values range from -90 to 90'))
    latitude = models.DecimalField(_('latitude'), max_digits=9, decimal_places=7, blank=True, null=True,
                                help_text=_('Latitude values range from -180 to 180'))

forms.py

class CrispyForm(ModelForm):
'''
This form serves as a generic form for adding and editing items.
'''
def __init__(self, *args, **kwargs):
    form_action = kwargs.pop('form_action', None)
    super(CrispyForm, self).__init__(*args, **kwargs)

    self.helper = FormHelper(self)

    # Form attributes
    self.helper.form_method = 'post'
    self.helper.form_action = reverse(form_action)
    self.helper.form_class = 'form-horizontal'
    self.helper.label_class = 'col-lg-2'
    self.helper.field_class = 'col-lg-10'

    # Save button, having an offset to align with field_class
    save_text = _('Save')
    self.helper.layout.append(Submit('save_form', save_text, css_class="btn btn-primary col-sm-offset-2"))


class SomeItemAddForm(CrispyForm):
    def __init__(self, *args, **kwargs):
        super(SomeItemAddForm, self).__init__(*args, form_action='add-someitem')

    class Meta:
        model = SomeItem
        fields = '__all__'

views.py

class SomeItemAddView(CreateView):
    template_name = 'add_someitem.html'
    form_class = SomeItemAddForm
    model = SomeItem
    success_url = reverse_lazy('someitmes')

class ListSomeItemsView(ListView):
    model = SomeItem
    template_name = 'list_someitems.html'

urls.py

urlpatterns = [
    url(r'^someitems/add$', SomeItemAddView.as_view(), name='add-someitem'),
    url(r'^someitems$', ListSomeItemsView.as_view(), name='someitems'),
]

add_someitem.html

{% extends "base.html" %}
{% load i18n %}
{% load crispy_forms_tags %}

{% block content %}
    <div class="row">
        <div class="col-lg-12">
            <div class="ibox float-e-margins">
                <div class="ibox-content">
                    {% crispy form %}
                </div>
            </div>
        </div>
    </div>
{% endblock content %}

person Marc    schedule 31.07.2015    source источник
comment
Вы взглянули на это?   -  person MD Islam    schedule 31.07.2015
comment
Упомянутый вами пост имеет ту же предпосылку: он использует встроенные формы. Если я изменю helper.field_template на другое значение (или удалю его, чтобы установить значение по умолчанию), ошибки отображаются над каждым полем -> это просто не так в моем приложении, я не получаю ошибки, отображаемые с настройкой по умолчанию .   -  person Marc    schedule 03.08.2015


Ответы (1)


Измените это в файле forms.py.

class SomeItemAddForm(CrispyForm):
    def __init__(self, *args, **kwargs):
        super(SomeItemAddForm, self).__init__(*args, form_action='add-someitem', **kwargs)

    class Meta:
        model = SomeItem
        fields = '__all__'

Вы передаете только один kw-аргумент — «form_action» и вызываете функцию инициализации родительского класса формы без некоторых важных kw-аргументов. Итак, в общем: вы передаете только дополнительный аргумент ключевого слова, а остальные забыли - из формы, моделиформы и т.д...

person simopopov    schedule 03.08.2015
comment
Большое спасибо @Simeon Popov, теперь все работает и ошибки отображаются. Раньше казалось, что форма развязана. Я не знал, что родительский класс также ожидал некоторых аргументов от kwargs-dict. - person Marc; 03.08.2015