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