带有引导程序的 django modelform

Posted

技术标签:

【中文标题】带有引导程序的 django modelform【英文标题】:django modelform with bootstrap 【发布时间】:2015-10-16 02:43:18 【问题描述】:

我想用 bootstrap 格式化我的模型表单,而不需要任何额外的包(只使用 bootstrap 源文件)。我要配置的特定表单:

class FoodForm(forms.ModelForm):

    class Meta:
        model = Food
        fields = ['name', 'company']
        exclude = ('user', 'edit')

“名称”是一个文本字段,我想成为一个引导文本字段,“公司”是一个选择字段(来自外键),我想成为一个引导下拉列表。

表单模板的当前设置:

    % extends "mainsite/base.html" %

    % block content %

    <form method="POST" class="post-form">% csrf_token %
         form.as_p 
        <button type="submit" class="btn btn-primary">Save</button>
</form>
    </form> 

    % endblock %

将任何 django modelform 字段格式化为引导程序的最佳做法是什么?

【问题讨论】:

How to add class, id, placeholder attributes to a field in django model forms的可能重复 为什么不用crispy-forms?我知道你提到过你想使用香草引导程序,但这似乎没有必要,因为脆的形式很轻。 【参考方案1】:

只需使用Django Crispy Forms 这相当简单直接

【讨论】:

【参考方案2】:

引导字段的技巧是将form-control 类注入每个字段,并确保每个字段都位于form-group dom 元素中。要将该类注入到您的每个字段中,您可以这样:

class FoodForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(FoodForm, self).__init__(*args, **kwargs)
        for field in iter(self.fields):
            self.fields[field].widget.attrs.update(
                'class': 'form-control'
        )

现在,在您的 django 模板中,您可以遍历您的表单字段,将每个字段放入引导程序的 form-group。例如:

<form method="POST" class="post-form">
    % for field in form %
    <div class="form-group">
         field 
    </div>
    % endfor %
</form>

我还要说这种设置(Django + Bootstrap)现在非常普遍,因此谷歌搜索“使用 django 的引导表单”应该会产生更多关于进一步自定义的知识。祝你好运!

【讨论】:

以上是关于带有引导程序的 django modelform的主要内容,如果未能解决你的问题,请参考以下文章

Django:带有条件的ModelForm

Django Modelform(带有排除字段)

带有 ModelForm 和 ModelFormSet 的 Django WizardView(这个不渲染)

带有 Select Widget 的 Django ModelForm - 使用 object.uid 作为默认选项值而不是 object.id

带有普通 Django 表单和引导程序的 Django-CKEditor

你能从它的 ModelForm 中访问一个 Django 模型的“属性”吗?