[Fixed]-Populate select with initial data

1👍

You are not approaching this in the right way at all.

initial is specifically for pre-setting the chosen value. You are trying to populate the list of values. For that, you will need to use an actual field that supports such a list; and that is a ChoiceField, not a CharField.

Secondly, choices need to have an ID value as well as a display value; so you need a list/tuple of 2-tuples.

form:

class CreatePlayerForm(forms.Form):
    size = forms.ChoiceField(choices=[])

    def __init__(self, *args, **kwargs):
        sizes = kwargs.pop('sizes')
        super(CreatePlayerForm, self).__init__(*args, **kwargs)
        self.fields['sizes'].choices = sizes

view:

class CreatePlayer(FormView):
    ...
    def get_form_kwargs(self, *args, **kwargs):
        form_kwargs = super(CreatePlayer, self).get_form_kwargs(*args, **kwargs)
        boots = Boots.objects.filter(...).values_list('id', 'size')
        form_kwargs['sizes'] = boots
        return form_kwargs

template:

{{ form.boots }}

Leave a comment