forma de widgets de Django ofrecen una manera de pasar una lista de atributos que deben ser prestados en el <option>
etiqueta:
my_choices = (('one', 'One'), ('two', 'Two'))
class MyForm(forms.Form):
some_field = forms.ChoiceField(choices=my_choices,
widget=forms.Select(attrs={'disabled':'disabled'}))
Desafortunadamente, esto no va a funcionar para usted porque se aplica el atributo a CADA etiqueta de opción que se representa. Django no tiene manera de saber automáticamente cuál debería estar habilitado y cuál debería ser deshabilitado.
En su caso, le recomiendo que escriba un widget personalizado. Es bastante fácil de hacer, y no tienes tanta lógica personalizada para aplicar. Los documentos sobre esto son here. En resumen, aunque:
- subclase
forms.Select
, que es el selecto procesador predeterminado
- en la subclase, poner en práctica el método
render(self, name, value, attrs)
. Use su lógica personalizada para determinar si el value
califica como necesario deshabilitar. Eche un vistazo a la implementación muy corta de render
en django/forms/widgets.py
si necesita una certificación.
Entonces, definir el campo de la forma de usar el widget personalizado:
class MyForm(forms.Form):
some_field = forms.ChoiceField(choices=my_choices,
widget=MyWidget)
Esta es una muy buena solución, pero el método adecuado para cambiar los atributos de las opciones 'se render_option() '' no se rinde() '(que representa todo el widget) – jnns