# 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