Ivcota
Ivcota

Reputation: 37

How to pass in variable into Django Form?

I've been reading lots of questions like this on stackoverflow but none seem to work. All I want to do is make a filtered form dropdown. I'm not sure how do go about doing it. I get the error that main is not defined... but I'm sure that's because it's not initialized or something? I'm very confused lol.

My form code looks like this:

class AssignForm(ModelForm):

class Meta():
    model = Address
    fields = ['overseer','publisher', 'status']

def __init__(self, *args, **kwargs,):
    super(AssignForm, self).__init__(*args, **kwargs)
    self.fields['publisher'].queryset = Publisher.objects.filter(service_group=main)

Here is my View:

def assignment(request, pk_a):

assign = Address.objects.get(id=pk_a)
num = request.user.overseer.publisher_set.first()
main = num.service_group.id
print(main)

I would like to use the variable: main inside my form dropdown so I can limit the dropdown relative to the overseer. How can this be accomplished? Thanks!

form = AssignForm(main, request.POST, instance=assign)

context = {'form':form,}
return render(request, 'sms/assign.html', context )

Upvotes: 1

Views: 58

Answers (1)

Arun T
Arun T

Reputation: 1610

Change your form to

class AssignForm(ModelForm):

    class Meta():
        model = Address
        fields = ['overseer','publisher', 'status']

    def __init__(self, main, *args, **kwargs,):
        super(AssignForm, self).__init__(*args, **kwargs)
        self.fields['publisher'].queryset = Publisher.objects.filter(service_group=main)

and change your Form instantiation in views to

form = AssignForm(main, request.POST, instance=assign)

Upvotes: 2

Related Questions