Te recomendamos que revises esta solución en un ambiente controlado antes de enviarlo a producción, saludos.
Solución:
los get_initial
El método está hecho para completar el valor inicial de los campos de su formulario. No configurar los disponibles choices
o para modificar sus campos attributes.
Para pasar con éxito sus opciones de su vista al formulario, debe implementar el get_form_kwargs
método en su opinión:
class PairRequestView(FormView):
form_class = PairRequestForm
def get_form_kwargs(self):
"""Passing the `choices` from your view to the form __init__ method"""
kwargs = super().get_form_kwargs()
# Here you can pass additional kwargs arguments to the form.
kwargs['favorite_choices'] = [('choice_value', 'choice_label')]
return kwargs
Y en su forma, obtenga las opciones del argumento de los kwargs en el __init__
método y establezca las opciones en el campo:
class PairRequestForm(forms.Form):
favorite_choices = forms.ChoiceField(choices=[], widget=RadioSelect, required=False)
def __init__(self, *args, **kwargs):
"""Populating the choices of the favorite_choices field using the favorites_choices kwargs"""
favorites_choices = kwargs.pop('favorite_choices')
super().__init__(*args, **kwargs)
self.fields['favorite_choices'].choices = favorites_choices
Y voilá !
Otra forma sencilla de hacerlo sería:
class PairRequestView(FormView):
form_class = PairRequestForm
def get_form(self, *args, **kwargs):
requester_obj = Profile.objects.get(user__username=self.request.user)
favorites_set = requester_obj.get_favorites()
form = super().get_form(*args, **kwargs)
form.fields['favorite_choices'].choices = favorites_set
return form
valoraciones y comentarios
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)