From bf472a69fdfdb5182a83a6d64909e9662637be33 Mon Sep 17 00:00:00 2001 From: James Graham Date: Fri, 17 Apr 2020 16:03:11 +0100 Subject: [PATCH] refactor: Reverse relationship query in network view --- people/views/network.py | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/people/views/network.py b/people/views/network.py index 117557d..970acc4 100644 --- a/people/views/network.py +++ b/people/views/network.py @@ -3,7 +3,7 @@ Views for displaying networks of :class:`People` and :class:`Relationship`s. """ from django.contrib.auth.mixins import LoginRequiredMixin -from django.db.models import Q +from django.db.models import F, Q from django.forms import ValidationError from django.utils import timezone from django.views.generic import FormView @@ -45,16 +45,16 @@ class NetworkView(LoginRequiredMixin, FormView): at_time = timezone.now() - relationship_set = models.Relationship.objects.all() + relationship_answerset_set = models.RelationshipAnswerSet.objects.filter( + Q(replaced_timestamp__gt=at_time) | Q(replaced_timestamp__isnull=True), + timestamp__lte=at_time + ) # Filter answers to relationship questions for field, values in form.cleaned_data.items(): if field.startswith('question_') and values: - relationship_set = relationship_set.filter( - # Time filters must be here - Q(answer_sets__replaced_timestamp__gt=at_time) | Q(answer_sets__replaced_timestamp__isnull=True), - answer_sets__timestamp__lte=at_time, - answer_sets__question_answers__in=values + relationship_answerset_set = relationship_answerset_set.filter( + question_answers__in=values ) context['person_set'] = serializers.PersonSerializer( @@ -63,7 +63,9 @@ class NetworkView(LoginRequiredMixin, FormView): ).data context['relationship_set'] = serializers.RelationshipSerializer( - relationship_set.distinct(), + models.Relationship.objects.filter( + pk__in=relationship_answerset_set.values_list('relationship', flat=True) + ), many=True ).data