filter using a complex query operator Q

Date: May 17th 2016
Last updated: May 17th 2016

Django offers a complex query operator "Q" to filter model objects. This allows you to create an OR statement in views.py.

Why did I need this? I needed to provide a selection of options to a user that they have either created themselves OR a core list that an admin member has provided.

views.py

# import
from django.db.models import Q

@login_required
@surfer_matches_user
def selectfins(request, surfer_id):
    surfer = get_object_or_404(Surfer, pk=surfer_id)
    form = FinSelectForm(request.POST or None, instance=surfer)
    ################## SOLUTION ###################
    form.fields['fins'].queryset = Fin.objects.filter(Q(surfer=surfer) | Q(user=1))
    ###############################################
    if form.is_valid():
        form.save()
        return redirect('/{}/'.format(surfer_id))
    return render(request, 'surferprofile/selectfins.html',
            {'surfer': surfer, 'form': form})

results matching ""

    No results matching ""