# views.py @login_required def create_payment(request): user = request.user if not user.vehicle_set.all(): return redirect("vehicle_auth_send") else: if request.method == 'POST': form = PaymentForm(user=user, data=request.POST) if form.is_valid(): form.save() return redirect('home') else: form = PaymentForm(user=user) return render(request, 'forms.html', {'form': form}) #forms.py class PaymentForm(forms.ModelForm): class Meta: model = Payment def __init__(self, user=None, *args, **kwargs): super(PaymentForm, self).__init__(*args, **kwargs) # pass in user and override queryset for ModelChoiceField self._user = user vehicles = self._user.vehicle_set.all().prefetch_related('ticket_set') ticket_list= [] for i in vehicles: for j in i.ticket_set.all(): if j.sum_outstanding(): ticket_list.append(j.pk) self.ticket_queryset = Ticket.objects.filter(pk__in=ticket_list) self.fields['ticket'].queryset = self.ticket_queryset def save(self, commit=True): instance = super(PaymentForm, self).save(commit=False) instance.user = self._user if commit: instance.save() return instance