我正在使用一个ModelForm类为一个ManyToManyField生成一堆复选框,但是我遇到了一个问题:当我编辑一个对象时,默认行为会自动检查相应的复选框,但我不知道如何在我自己的自定义templatetag中获取这些信息。在
我的模型是这样的:
from myproject.interests.models import Interest
class Node(models.Model):
interests = models.ManyToManyField(Interest, blank=True, null=True)
class MyForm(ModelForm):
from django.forms import CheckboxSelectMultiple, ModelMultipleChoiceField
interests = ModelMultipleChoiceField(
widget=CheckboxSelectMultiple(),
queryset=Interest.objects.all(),
required=False
)
class Meta:
model = MyModel
在我看来:
^{pr2}$在我的模板中:
{{ form.interests|alignboxes:"CheckOption" }}
这是我的模板标签:
@register.filter
def alignboxes(boxes, cls):
"""
Details on how this works can be found here:
http://docs.djangoproject.com/en/1.1/howto/custom-template-tags/
"""
r = ""
i = 0
for box in boxes.field.choices.queryset:
r += "<label for=\"id_%s_%d\" class=\"%s\"><input type=\"checkbox\" name=\"%s\" value=\"%s\" id=\"id_%s_%d\" /> %s</label>\n" % (
boxes.name,
i,
cls,
boxes.name,
box.id,
boxes.name,
i,
box.name
)
i = i + 1
return mark_safe(r)
问题是,我这样做只是为了能在这些框上包装一些更简单的标记,所以如果有人知道如何以更简单的方式实现这一点,我会全神贯注地听。我很乐意知道一种方法来访问是否应该检查一个盒子。在
原来我要查找的值,列表中“checked”的元素不在
field
中,而是form
对象的一部分。我重新处理了模板标记,使其看起来像这样,它确实满足了我的需要:对于后面的人,请注意上面的
checked
值是在boxes.form.initial[boxes.name]
中找到的在复选框的输入标记中,可以根据某些条件添加checked属性。假设您的box对象具有属性checked,该属性值为“checked”或空字符串“”
相关问题 更多 >
编程相关推荐