Skip to content

Commit 2fec5c2

Browse files
authored
Optimizations (#171)
* refactor: greatly improves home page performance by prefetching Tags instead of letting N+1 queries * refactor: move ordering to Tag's Meta * build: migrations
1 parent 7d2f8a3 commit 2fec5c2

6 files changed

Lines changed: 70 additions & 2 deletions

File tree

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# Generated by Django 5.1.7 on 2026-03-14 02:22
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('revert', '0001_initial'),
10+
]
11+
12+
operations = [
13+
migrations.AlterField(
14+
model_name='reverttask',
15+
name='id',
16+
field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
17+
),
18+
]
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
# Generated by Django 5.1.7 on 2026-03-14 02:22
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('store', '0023_edits_bigints'),
10+
]
11+
12+
operations = [
13+
migrations.AlterField(
14+
model_name='batch',
15+
name='id',
16+
field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
17+
),
18+
migrations.AlterField(
19+
model_name='tool',
20+
name='id',
21+
field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
22+
),
23+
]

store/models.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,8 @@ def tag_ids(self):
207207

208208
@cached_property
209209
def sorted_tags(self):
210-
return self.tags.order_by('-priority', 'id')
210+
# tags come sorted through its Meta ordering
211+
return self.tags.all()
211212

212213
@cached_property
213214
def reverting_batches(self):

store/views.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
from .serializers import BatchSimpleSerializer, BatchDetailSerializer, BatchCSVSerializer, EditSerializer, ToolSerializer, ToolStatsSerializer
1515
from django_filters.rest_framework import DjangoFilterBackend
1616
from tagging.filters import TaggingFilterBackend
17+
from tagging.models import Tag
1718

1819
class BatchView(generics.RetrieveAPIView):
1920
serializer_class = BatchDetailSerializer
@@ -46,7 +47,12 @@ class APIBatchView(BatchView):
4647

4748
class BatchesView(generics.ListAPIView):
4849
serializer_class = BatchSimpleSerializer
49-
queryset = Batch.objects.all().order_by('-ended')
50+
queryset = (
51+
Batch.objects
52+
.select_related('tool')
53+
.prefetch_related('tags')
54+
.order_by('-ended')
55+
)
5056
template_name = 'store/batches.html'
5157
filter_fields = ('user',)
5258
filter_backends = (TaggingFilterBackend,)
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
# Generated by Django 5.1.7 on 2026-03-14 02:22
2+
3+
from django.db import migrations
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('tagging', '0005_inspect_batches'),
10+
]
11+
12+
operations = [
13+
migrations.AlterModelOptions(
14+
name='tag',
15+
options={'ordering': ['-priority', 'id']},
16+
),
17+
]

tagging/models.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,9 @@ class Tag(CachingMixin, models.Model):
130130
#: Color for the tag (HTML coded, including hash)
131131
color = models.CharField(max_length=32, default='#939393')
132132

133+
class Meta:
134+
ordering = ['-priority', 'id']
135+
133136
@property
134137
def display_name(self):
135138
"""

0 commit comments

Comments
 (0)