【问题标题】:Django multiplechoicefield not rending on pageDjango 多项选择字段不在页面上显示
【发布时间】:2019-04-10 17:17:54
【问题描述】:

我正在尝试获取一个包含姓名和月份的表格,并将返回具有该姓名和月份的学生(考勤系统)。我正在为表单使用 MultipleChoiceField,但它不会在浏览器中呈现。我也在使用 Materialize CSS。我如何对这个问题进行排序?我也在手动渲染表单字段。

forms.py:

class attendenceFinder(forms.Form):
    months = ((1, 'JAN'),
             (2, 'FEB'),
             (3, 'MAR'),
             (4, 'APR'),
             (5, 'MAY'),
             (6, 'JUN'),
             (7, 'JUL'),
             (8, 'AUG'),
             (9, 'SEP'),
             (10, 'OCT'),
             (11, 'NOV'),
             (12, 'DEC')
    )    

    name = forms.CharField()
    month = forms.MultipleChoiceField(widget=forms.SelectMultiple, choices=months)

attendence.html:

<form action="/get_attendence/", method="post">
<div class="container">
        {{ form.non_field_errors }}
    <div class="fieldWrapper">
        {{ form.name.errors }}
        <label for="{{ form.name.id_for_label }}">Name</label>
        {{ form.name }}
    </div>
    <div class="fieldWrapper">
        {{ form.month.errors }}
        <label for="{{ form.month.id_for_label }}">{{form.month}}
            <span>{{ form.month.label }}</span>
        </label>
    </div>
    <button class="waves-effect waves-light btn-large lime accent-2 black-text" type="submit" name="action">Submit
    <i class="material-icons right">send</i>
    </div>
</form>

页面来源:

   <div class="fieldWrapper">

        <select name="month" required id="id_month" multiple>
  <option value="1">JAN</option>

  <option value="2">FEB</option>

  <option value="3">MAR</option>

  <option value="4">APR</option>

  <option value="5">MAY</option>

  <option value="6">JUN</option>

  <option value="7">JUL</option>

  <option value="8">AUG</option>

  <option value="9">SEP</option>

  <option value="10">OCT</option>

  <option value="11">NOV</option>

  <option value="12">DEC</option>

</select>
        <span>Month</span>

    </div>

浏览器中的表单:

名称字段呈现正常,但月份多项选择不呈现。

【问题讨论】:

  • 为什么要将字段包装在
  • 我在其他一些问题中看到了这一点,并认为它可能有助于渲染,因为 Materialize CSS。
  • HTML 在您的浏览器中显示什么? (只是
    里面的部分)
  • 我在问题中添加了一个页面源。如果这就是你想要的?
  • 如您所见,选项在那里。你只是不应该把 里面

标签: python html django


【解决方案1】:

Materialize CSS 期望看到带有 class="browser-default" 的标签。但是 Django 表单不添加类。所以forms.py中必须传入以下内容:

class attendenceFinder(forms.Form):
    months = ((1, 'JAN'),
              (2, 'FEB'),
              (3, 'MAR'),
              (4, 'APR'),
              (5, 'MAY'),
              (6, 'JUN'),
              (7, 'JUL'),
              (8, 'AUG'),
              (9, 'SEP'),
              (10, 'OCT'),
              (11, 'NOV'),
              (12, 'DEC')
    )
 month = forms.MultipleChoiceField(choices=months, widget=forms.Select(
            choices=months,
            attrs={'class': 'browser-default'}))

所有功劳都归于此链接:

https://github.com/Dogfalo/materialize/issues/4904

【讨论】:

    【解决方案2】:

    Django 材质对于使用 Materializecss 的表单渲染非常有帮助。这是项目https://github.com/viewflow/django-material 的链接。

    【讨论】:

      猜你喜欢
      相关资源
      最近更新 更多
      热门标签