首页 > 解决方案 > 不要在 models.py 上显示复选框类型布尔值

问题描述

我有模型项目提交 itm_stop:


class item(models.Model):
  itm_stop=models.BooleanField(verbose_name='item stop',default=False)

在文件 forms.py 中:

from django import forms,modelsForm
class itemsForm(modelsForm.Form):

    class Meta:
        model =item
        fields = "__all__"

在文件 views.py 中:

from .forms import itemsForm
def items_create(request):
    if request.method == 'POST':
        form = itemsForm(request.POST, request.FILES)
    else:
        form = itemsForm()
    return render(request, 'items/items.html',{"items" :form})

在文件模板 item.html 中:

{% load widget_tweaks %}
{% for field in items %}
<!-- append to an attribute -->

<div class="form-group{% if field.errors %} has-error{% endif %}">
    <label for="{{ field.id_for_label }}">{{ field.label }}</label>
    {% render_field field class="form-control" %}
    {% for error in field.errors %}
      <p class="help-block">{{ error }}</p>
    {% endfor %}
  </div>
{% endfor %}

当我做演示时,我无法显示复选框,它在页面上显示为一个空框,我没有找到原因

标签: pythondjangodjango-modelsdjango-views

解决方案


我这样做的方式是子类化表单类而不是 modelForm 类

因此,在您的表单中,您将像这样使用 forms.BooleanField ...

from django import forms

class itemsForm(forms.Form):
    itm_stop= forms.BooleanField(
        label='item stop',
        initial=False
    )

以下是您访问它们的方式:您不需要为项目中的字段做

<div class="form-group">
   {% if field.errors %} has-error{% endif %}
    <label for="{{ items.itm_stop}} ">{{items.itm_stop.label}}</label>
    {% render_field field class="form-control" %}
    {% for error in field.errors %}
      <p class="help-block">{{ error }}</p>
    {% endfor %}
  </div>
{% endfor %}

推荐阅读