【问题标题】:Django crispy forms 'form-inline' doesn't works as expectedDjango 脆表单'form-inline'不能按预期工作
【发布时间】:2020-10-24 17:55:37
【问题描述】:

我已经按照crispy forms docs 使用bootstarp4 创建了一个简单的内联表单。但似乎表单不是变成了“inline”,而是变成了“horizo​​ntal”

这是我目前拥有的代码 sn-p 以及呈现的 Web 视图的屏幕截图,

# models.py
from django.db import models


class InlineTestModel(models.Model):
    name = models.CharField(max_length=20)
    age = models.IntegerField()
    email = models.EmailField()


# form_helper.py
from crispy_forms.helper import FormHelper
from crispy_forms.layout import Submit


class FormHelperBase(FormHelper):
    form_inputs = []

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.set_inputs()

    def set_inputs(self):
        for form_input in self.form_inputs:
            self.add_input(form_input)


class TestInlineFormHelper(FormHelperBase):
    form_class = 'form-inline'
    field_template = 'bootstrap4/layout/inline_field.html'
    layout = Layout(
        'name', 'age', 'email'
    )
    form_inputs = [
        Submit('Save', 'Save', css_class='button white')
    ]


# forms.py
from django import forms


class TestInlineForm(forms.ModelForm):
    helper = TestInlineFormHelper()

    class Meta:
        model = InlineTestModel
        fields = '__all__'


# views.py
from django.views import generic
from django.urls import reverse


class TestInlineAddView(generic.CreateView):
    model = InlineTestModel
    form_class = TestInlineForm
    template_name = 'app_name/test_inline_add.html'

    def get_success_url(self):
        return reverse('app_name:success_url')

# template
{% extends 'expenses/base.html' %}
{% load static %}
{% load crispy_forms_tags %}

{% block form_body %}
    <form method="post">{% csrf_token %}
        {% crispy form %}
    </form>
{% endblock %}

呈现的网页视图

【问题讨论】:

  • 我知道发布文章参考而不是答案很糟糕,但现在我的网络非常糟糕。但是你可以检查这个article
  • 您提到的文章似乎很有希望使用内联功能。但是,该博客缺少 form_class = 'form-inline' 的用法,我正在寻找它。

标签: python django bootstrap-4 django-crispy-forms


【解决方案1】:

问题是,我们在使用 crispy 标签时不需要使用 &lt;form&gt;...&lt;/form&gt; 标签

{% extends 'expenses/base.html' %}
{% load static %}
{% load crispy_forms_tags %}

{% block form_body %}
    <form method="post">{% csrf_token %}
        {% crispy form %}
    </form>
{% endblock %}

简而言之,它只需要一行,就像

{% extends 'expenses/base.html' %}
{% load static %}
{% load crispy_forms_tags %}

{% crispy form %}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-22
    • 2015-06-26
    • 2013-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多