using views to provide queryset to a form
Date: April 19th 2016
Last updated: April 19th 2016
I want to provide a form that limits the number of options based on where a user lives. That is, after entering a city in their profile page I want the local beach select form to only show beaches that are in their city.
views.py
@login_required
def selectbeach(request, surfer_id):
surfer = get_object_or_404(Surfer, pk=surfer_id)
form = BeachSelectForm(request.POST or None, instance=surfer)
# =========== Solution ============================================
form.fields['homebeach'].queryset = Beach.objects.filter(city=surfer.city.id)
# after a form is created, modify the chosen field by filtering
# the model object.
#
# Refer back to models.py to see where the links are made.
#
# Beach has a foreign key with a table called Nearestcity which is referenced
# by the field name 'city'.
#
# Each surfer also has a foreign key to the table NearestCity which is also
# referenced by a field called city.
# =================================================================
if form.is_valid():
form.save()
return redirect('/{}/'.format(surfer_id))
return render(request, 'surferprofile/selectbeach.html',
{'surfer': surfer, 'form': form})