【问题标题】:django ModelMultipleChoiceField display in templatedjango ModelMultipleChoiceField 在模板中显示
【发布时间】:2013-04-23 14:47:28
【问题描述】:
class AddRoleForm(forms.Form):
     roles=forms.ModelMultipleChoiceField(queryset=Role.objects.all(),widget=forms.CheckboxSelectMultiple())

在模板中:

{{ form.roles }}

结果是这样的:

 <ul>
    <li><label for="id_roles_0"><input type="checkbox" value="1" name="roles" id="id_roles_0"> User object</label></li>
    <li><label for="id_roles_1"><input type="checkbox" value="2" name="roles" id="id_roles_1"> User object</label></li>
    </ul>

我想在每一行中显示角色的名称并在复选框中获取角色的 ID 喜欢:

<ul>
    <li><label for="id_roles_0"><input type="checkbox" value="100" name="roles" id="id_roles_0">boss</label></li>
    <li><label for="id_roles_1"><input type="checkbox" value="101" name="roles" id="id_roles_1">employee</label></li>
    </ul>

我该怎么办?

【问题讨论】:

    标签: django


    【解决方案1】:

    检查您的模型“角色”

    你需要添加

    def __unicode__(self):
        return self.name
    

    【讨论】:

    • 覆盖 str 对我有帮助。
    【解决方案2】:

    我认为这篇文章可能对你有所帮助。

    看看:Django - Render CheckboxSelectMultiple() widget individually in template (manually)

    【讨论】:

      【解决方案3】:
      • 要更改value 参数,您必须执行以下步骤:

        1. 编写您自己的CheckboxInput 并重载render 函数。你必须改变

          final_attrs['value'] = force_text(value)
          

          类似的东西:

          final_attrs['value'] = force_text(str(int(value) + 99))
          

          其他部分无需更改即可复制。

        2. 编写自己的CheckboxSelectMultiplue 并重载render 函数。你必须改变

          cb = CheckboxInput(final_attrs, check_test=lambda value: value in str_values)
          

          到您对CheckboxInput 的实施。

        3. 使用您的新小部件而不是内置小部件。

        注意:部分代码可能会有所不同,因为它们可能取决于 Django 版本

      • 关于User object 的问题:我不确定,但请尝试检查您的__unicode__ 函数。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-09-20
        • 2019-12-22
        • 2021-02-07
        • 2012-03-01
        • 2014-04-23
        • 2019-09-20
        • 2020-05-05
        • 2019-08-07
        相关资源
        最近更新 更多