Я использую класс ModelForm для создания набора флажков для ManyToManyField, но я столкнулся с одной проблемой: в то время как поведение по умолчанию автоматически проверяет (когда я редактирую объект), я не могу понять, как получить эту информацию в моем собственном шаблоне templatetag.Как получить тег шаблона для автоматической проверки флажка в Django
Вот что у меня есть в моей модели:
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
И на мой взгляд:
from myproject.myapp.models import MyModel,MyForm
obj = MyModel.objects.get(pk=1)
f = MyForm(instance=obj)
return render_to_response(
"path/to/form.html", {
"form": f,
},
context_instance=RequestContext(request)
)
И в моем шаблоне:
{{ form.interests|alignboxes:"CheckOption" }}
А вот мой templatetag:
@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)
Дело в том, что я делаю это, поэтому я могу обернуть более простую разметку вокруг этих ящиков, поэтому, если кто-то знает, как сделать это проще, я все уши. Я был бы рад узнать, как получить доступ к тому, нужно ли проверять коробку.
Это вещь, объект box не имеет свойства «checked». Я пытаюсь выяснить, где я могу получить это значение, учитывая, что все, с чем я должен работать, это {{form.interests}}. Я предполагаю, что данные должны быть там, потому что, если я визуализую его без тега шаблона, флажки автоматически проверяются. –