我今天花了好几个小时在网上搜索,只是找不到解决问题的方法:
我在版本1.4.0和Bootstrap3中使用了crispy表单。我有一个CreateView,如下所示,它在crispy forms的帮助下显示一个表单。Bootstrap3的源代码似乎也加载了。“name”字段是必需的。
无论我在三个字段中输入了什么(或者如果我将它们完全保留为空),每次单击“保存”按钮时都会重新加载表单。没有出现错误消息(例如,对于必需的名称字段)。
这似乎与酥脆的形状有关。因为如果我把crispy forms放在外面,我会在name字段上方得到“this field is required”消息。
我只是不明白:我在这里遗漏了什么?
我遇到了this post,但这并不完全适合我的情况,因为我没有使用self.helper.field_模板变量。
模型.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'))

表单.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__'

视图.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'

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

添加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 %}

最佳答案

在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”,并调用父form类的init函数,而不传递一些重要的kw参数。所以一般来说:您只传递额外的关键字参数,而忽略了其他参数-来自表单、模型表单等。。。

关于python - crispy-forms 和 bootstrap 3没有显示错误消息,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31751256/

10-11 09:29