[Answered ]-Django model query tune up

2👍

Here’s a faster alternative.

Fetch all the ids of A and B in C at once:

z = ModelC.objects.values_list('a_id', 'b_id')

a_related, b_related = zip(*z) # split into a and b ids

Pass these to your context:

def my_views(request):
       return render(request, 'my_template.html', {
        'a_list': ModelA.objects.all(),
        'b_list': ModelB.objects.all(),
        'a_related': a_related,
        'b_related': b_related,
    })

And then use if...in in your template. The custom template filter can now be discarded:

{% for a in a_list %}
   {% for b in b_list %}
             {% if a.id in a_related and b.id in b_related %}
                 "OK"
             {% else %}
                 "Not ok"
             {% endif %}
   {% endfor %}
{% endfor %}

That replaces all the multiple queries in your filter with just one.

Leave a comment