django ModelMultipleChoiceField显示在模板中

时间:2013-04-23 14:47:29

标签: django

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>

我想在每一行中显示角色的名称,并在chebox中获取角色的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>

我该怎么办?

3 个答案:

答案 0 :(得分:3)

检查你的模特'角色'

你需要添加

def __unicode__(self):
    return self.name

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

  • 要更改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. 使用新的小部件而不是内置的。

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

    5. 关于User object的问题:我不确定,但请尝试检查您的__unicode__功能。