Fix submission list API performance: N+1 queries, missing indexes, and in-memory pagination

- Add select_related("user") in update_score() to eliminate N+1 on rating.user.role
- Return QuerySet directly from list_submissions so @paginate works at DB level
- Defer html/css/js fields in list queries to reduce data transfer
- Add db_index on flag field for filtered queries
- Add select_related("task", "user") to get_submission endpoint
- Replace manual list() serialization with resolve_* methods on SubmissionOut

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-09 18:26:32 +08:00
parent d4727b1538
commit 417e7c34bc
4 changed files with 66 additions and 31 deletions

View File

@@ -0,0 +1,18 @@
# Generated by Django 6.0.1 on 2026-03-09 10:24
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('submission', '0004_submission_flag'),
]
operations = [
migrations.AlterField(
model_name='submission',
name='flag',
field=models.CharField(blank=True, choices=[('red', '值得展示'), ('blue', '需要讲解'), ('green', '优秀作品'), ('yellow', '需要改进')], db_index=True, default=None, max_length=10, null=True, verbose_name='标记'),
),
]