2009-04-09 7 views

Respuesta

29

dentro de la plantilla, el campo travels como en realidad una instancia de BoundField (que es un objeto Django que une el campo y su valor para la representación). Esto significa que las propiedades son algo diferentes.

para repetir las elecciones como una tupla:

{% for choice in form.travels.field.choices %} 
    {{ choice }} - 
{% endfor %} 

Produces: (1, 'One') - (2, 'Two') - 

para iterar sobre los elementos en las tuplas elección por separado:

{% for choice_id, choice_label in form.travels.field.choices %} 
    {{ choice_id }} = {{ choice_label }} <br/> 
{% endfor %} 

Produces: 1 = One 
      2 = Two 

Espero que ayude. Dicho esto, no estoy seguro del contexto en el que necesitas hacer esto; en la superficie, no parece muy parecido al django. Puede encontrar que usar un campo de formulario personalizado o una etiqueta de plantilla personalizada le brinda una implementación más portátil y reutilizable que mantiene mejor la separación prevista de django entre el código de vista y el código de plantilla. Por supuesto, YMMV y bien podría ser que el enfoque de iteración directa sea apropiado para usted en este caso.

+3

Sé que esto es antiguo, pero ¿hay alguna manera de determinar si el campo está seleccionado? –

+0

Primero, tenga cuidado al usar un widget personalizado, las opciones de campo y las opciones de widgets pueden no ser las mismas. Por lo tanto, deberá usar "form.travels.field.widget.choices". –

+0

En segundo lugar, para la opción personalizada, seleccione si está usando un widget de radio, necesitará verificar cada valor con el valor del campo y configurar la entrada para que coincida cuando coincidan. Por ejemplo: "{% if form.travels.value = choice_id%} checked =" checked "{% endif%}". –

0

si tiene un Form.ModelForm con un campo de opción, puede iterarlo en la plantilla mediante un simple filtro de plantilla.

forms.py Plantilla

STATE_CHOICES = (
    (10, 'NO'), 
    (4, 'YES'), 
    (18, 'Send to another Chemist for Review'), 
    (34, 'Send to another Market Expert for Review'), 
    (20, 'HOLD'), 
) 
new_state = forms.ChoiceField(
    choices=STATE_CHOICES, 
    required=True, 
) 

:

{{ business_manager_form.new_state|filter_project_states:project }} 

y aquí está el filtro se auto.

@register.filter() 
def filter_project_states(argv, project): 
if project.department.id != 4: 
argv.field.choices = [choice for choice in argv.field.choices if choice[0] != 34] 
return argv 

Espero que esto ayude.

Cuestiones relacionadas