Iterate over choices in CheckboxSelectMultiple

后端 未结 2 1970
温柔的废话
温柔的废话 2020-12-15 23:41

I have a CheckboxSelectMultiple field, why can\'t I iterate over the single choices?

This doesn\'t work:

  {%for choice in form.travels.choices%}
            


        
2条回答
  •  庸人自扰
    2020-12-16 00:07

    Inside the template, the travels field as actually an instance of BoundField (which is a Django object that binds together the field and its value for rendering). This means the properties are somewhat different.

    To iterate over the choices as a tuple:

    {% for choice in form.travels.field.choices %}
        {{ choice }} - 
    {% endfor %}
    
    Produces: (1, 'One') - (2, 'Two') -
    

    To iterate over the elements in the choice tuples separately:

    {% for choice_id, choice_label in form.travels.field.choices %}
        {{ choice_id }} = {{ choice_label }} 
    {% endfor %} Produces: 1 = One 2 = Two

    Hope that helps. Having said that, though, I'm not sure of the context in which you're needing to do this; on the surface, it doesn't seem very django-like. You may find that using a custom form field or a custom template tag gives you a more portable, re-usable implementation that better maintains django's intended separation between view code and template code. Of course, YMMV and it could well be that the direct iteration approach is appropriate for you in this case.

提交回复
热议问题