如何在没有嵌套输入的情况下制作自定义Django CheckboxSelectMultiple

时间:2016-04-15 18:17:55

标签: python django

我正在使用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()方法,但是将输入移到标签标签之外似乎是一件巨大的努力。

0 个答案:

没有答案