How do you pass data into a Django form?

I’m using Django 4.0 and I’m trying to create a web app where the user selects a choice from a dropdown Django form. However, the choices will vary depending on the question and I want the form to be able to adapt to this.

This is what I have in

class QuestionAnswerForm(forms.Form):
def __init__(self, q_id, *args, **kwargs):
    self.q_id = q_id
    super(QuestionAnswerForm, self).__init__(*args, **kwargs)

q_id = self.q_id  # this line throws an error
question = Question.objects.get(pk=q_id)
choice = forms.ChoiceField(choices=get_choices(question))

However, I get the error: name ‘self’ not defined. I just want to know an easy way to pass the question id to the form so that the get_choices function can then return the choices that need to be displayed on the form.

In, the start of my view for the question sets the form in this way:

def question_detail_view(request, q_id):
    print(f"Question id is {q_id}")
    form = QuestionAnswerForm(request.POST or None, q_id=q_id)

Without seeing the models involved, it’s tough to know what the most appropriate solution may be.

In general, if your choices have a ForeignKey relationship to the questions, you can use the ModelChoiceField with the queryset option to define the choices being presented.