我正在使用Django 1.9.1。 我有一个包含这样类别的表单:
class MyModelEditForm(forms.ModelForm):
class Meta:
model = MyModel
fields = ['name',
'email',
'categories',
]
widgets = {
'categories': forms.CheckboxSelectMultiple(),
}
这是模特:
class MyModel(models.Model):
name = models.CharField(max_length=256, verbose_name='navn')
email = models.EmailField(null=True, blank=True)
categories = models.ManyToManyField(Category)
class Category(models.Model):
name = models.CharField(max_length=128)
updated_at = models.DateTimeField(auto_now=True)
created_at = models.DateTimeField(auto_now_add=True)
当我在模板中使用我的表单时,我可以说{{ form.categories }}
并且我得到了一堆包含我所有类别的复选框!优秀,功能上这正是我想要的。这样一切都有效。我的问题是我不希望输入字段嵌套在标签中,就像Django默认的那样。
所以我试图循环这样的类别:
{% for category in form.categories %}
<input type="checkbox" name="{{ category.name }}" class="styled-checkbox" value="{{ category.id }}" id="{{ category.id_for_label }}" {% if category.is_checked %}checked="checked"{% endif %}>
<label for="{{ category.id_for_label }}">{{ category.choice_label }}</label>
{% endfor %}
但显然我无法将值设置为{{ category.id }}
,它什么也没有呈现。我也试过{{ category.related__id }}
,但那也不是。在文档中查看,但它似乎并没有真正说明这个问题。如果只有输出输入标签的方法,那也是可以接受的。
所以甚至可以从这里访问相关的对象id?或者还有另一种自定义输出的方法吗?我看了一下覆盖了render()方法,但是将输入移到标签标签之外似乎是一件巨大的努力。