Skip to content

Commit

Permalink
Fix event-pk query n+1 selects
Browse files Browse the repository at this point in the history
  • Loading branch information
szabozoltan69 committed Jun 29, 2024
1 parent 843f5b5 commit a841161
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 5 deletions.
11 changes: 8 additions & 3 deletions api/drf_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -668,22 +668,27 @@ def get_serializer_class(self):
def retrieve(self, request, pk=None, *args, **kwargs):
if pk:
try:
FR = Prefetch(
"field_reports",
queryset=FieldReport.objects.prefetch_related("countries", "contacts"),
)
if self.request.user.is_authenticated:
if is_user_ifrc(self.request.user):
instance = Event.objects.get(pk=pk)
instance = Event.objects.prefetch_related(FR).get(pk=pk)
else:
user_countries = (
UserCountry.objects.filter(user=request.user.id)
.values("country")
.union(Profile.objects.filter(user=request.user.id).values("country"))
)
instance = (
Event.objects.exclude(visibility=VisibilityChoices.IFRC)
Event.objects.prefetch_related(FR)
.exclude(visibility=VisibilityChoices.IFRC)
.exclude(Q(visibility=VisibilityChoices.IFRC_NS) & ~Q(countries__id__in=user_countries))
.get(pk=pk)
)
else:
instance = Event.objects.filter(visibility=VisibilityChoices.PUBLIC).get(pk=pk)
instance = Event.objects.prefetch_related(FR).filter(visibility=VisibilityChoices.PUBLIC).get(pk=pk)
# instance = Event.get_for(request.user).get(pk=pk)
except Exception:
raise Http404
Expand Down
4 changes: 2 additions & 2 deletions api/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -843,8 +843,8 @@ class Meta:


class MiniFieldReportSerializer(ModelSerializer):
contacts = FieldReportContactSerializer(many=True)
countries = MiniCountrySerializer(many=True)
contacts = FieldReportContactSerializer(many=True, read_only=True)
countries = MiniCountrySerializer(many=True, read_only=True)
epi_figures_source_display = serializers.CharField(source="get_epi_figures_source_display", read_only=True)
visibility_display = serializers.CharField(source="get_visibility_display", read_only=True)

Expand Down

0 comments on commit a841161

Please sign in to comment.