Skip to content

Commit

Permalink
Optimized number of queries on Projects page
Browse files Browse the repository at this point in the history
  • Loading branch information
bsekachev committed Jul 12, 2024
1 parent 5aae413 commit deb3996
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 3 deletions.
6 changes: 4 additions & 2 deletions cvat/apps/engine/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -1344,10 +1344,12 @@ class Meta:

def to_representation(self, instance):
response = super().to_representation(instance)
task_subsets = set(instance.tasks.values_list('subset', flat=True))
subsets = (task.subset for task in instance.tasks.all())
dimensions = (task.dimension for task in instance.tasks.all())
task_subsets = set(subsets)
task_subsets.discard('')
response['task_subsets'] = list(task_subsets)
response['dimension'] = instance.tasks.first().dimension if instance.tasks.count() else None
response['dimension'] = next(dimensions, None)
return response

class ProjectWriteSerializer(serializers.ModelSerializer):
Expand Down
6 changes: 5 additions & 1 deletion cvat/apps/engine/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -289,6 +289,8 @@ def get_queryset(self):
if self.action == 'list':
perm = ProjectPermission.create_scope_list(self.request)
queryset = perm.filter(queryset)
elif self.action == 'preview':
queryset = Project.objects.filter(**self.kwargs)
return queryset

@transaction.atomic
Expand Down Expand Up @@ -625,7 +627,7 @@ def append_backup_chunk(self, request, file_id):
def preview(self, request, pk):
self._object = self.get_object() # call check_object_permissions as well

first_task = self._object.tasks.order_by('-id').first()
first_task = self._object.tasks.select_related('data').order_by('-id').first()
if not first_task:
return HttpResponseNotFound('Project image preview not found')

Expand Down Expand Up @@ -864,6 +866,8 @@ def get_queryset(self):
if self.action == 'list':
perm = TaskPermission.create_scope_list(self.request)
queryset = perm.filter(queryset)
elif self.action == 'preview':
queryset = Task.objects.filter(**self.kwargs).select_related('data')

return queryset

Expand Down

0 comments on commit deb3996

Please sign in to comment.