使用引导程序的 Django 表单

Posted

技术标签:

【中文标题】使用引导程序的 Django 表单【英文标题】:Django form using bootstrap 【发布时间】:2018-09-19 04:43:31 【问题描述】:

我有以下字典:

POSSIBLE_POSITIONS = (
    ('1', 'Brazo'),
    ('2', 'Muñeca'),
    ('3', 'Pierna'),
    ('4', 'Pie'),
)

以下列形式使用:

from interface.positions import *
from django import forms

class PositionForm(forms.Form):
    position = forms.ChoiceField(choices = POSSIBLE_POSITIONS, label="", initial=1, widget=forms.Select())

这是呈现我的 html 模板的视图:

def add(request):
    return render(request, 'interface/add_user.html', 'device_list': Device.objects.all(), 'form': PositionForm())

这是html代码:

<body>
    <form class="square" action="% url 'interface:add_perform' %" method="post">
        % csrf_token %
        <div class="form-group">
            <label>ID paciente</label>
            <input autofocus class="form-control" name="user_id" placeholder="Ejemplo: 58192">
        </div>
        <div class="form-group">
            <label>Dispositivo a usar</label>
            <select name="device_id" class="form-control">
                % for device in device_list %
                    <option> device.id </option>
                % endfor %
                <option selected="selected"> Sin dispositivo </option>
            </select>
        </div>
        <div class="form-group">
            <label>Posición dispositivo</label>
            <div class="form-control">  form  </div>
        </div>
        <div class="form-group square_button">
            <button class="btn btn-success btn-md form-control" type="submit"> Crear Paciente </button>
        </div>
    </form>
</body>

问题在于,正如您在下图中看到的,这不是引导 css,所以它真的很奇怪。我该如何解决?

我希望它像 'Dispositivo a usar' 选择器。

已解决

我在这里找到了解决方案:Define css class in django Forms

【问题讨论】:

【参考方案1】:

遍历表单对象并在选择标签中设置form-control 类。它应该可以工作。

def __init__(self, *args, **kwargs):
    super(PositionForm, self).__init__(*args, **kwargs)
    self.fields['position'].widget.attrs['class'] = 'form-control'

【讨论】:

这必须放在 PositionForm 类上,不是吗?它会引发一个带有“名称”的关键错误。 你应该为position设置它【参考方案2】:

直接在表单上添加css类即可解决:

class PositionForm(forms.Form):
    position = forms.ChoiceField(choices = POSSIBLE_POSITIONS, label="", initial=1, widget=forms.Select(
        attrs=
            'class': 'form-control'
        
    ))

【讨论】:

以上是关于使用引导程序的 Django 表单的主要内容,如果未能解决你的问题,请参考以下文章

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

Django 表单和引导程序 - 添加小部件有效但不完全

在引导模式中提交 Django 表单

带有引导程序的 django modelform

如何将表单控件添加到 Django 表单?

使用引导程序样式化错误消息