Grade ids were the order the books were imported in (ninth=1, eighth=5), so gradeId: 5 meant eighth grade and the admin, the question filter and the API all listed grades out of order. Grade.number (1-12) is now read from the title, new grades take it as their id, and migration 0008 moves existing ids plus every reference to them: Unit, the loose grade_id in accounts/ai_tutor/rag, and the grade target inside campaign JSON. Unnumbered demo grades move above 100 and the id sequence is raised past 12 so they never collide with a real grade. The frontend needs no change: it always reads gradeId from the server. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
23 lines
757 B
Python
23 lines
757 B
Python
# Generated by Django 5.2.17 on 2026-09-23 19:05
|
||
|
||
from django.db import migrations, models
|
||
|
||
|
||
class Migration(migrations.Migration):
|
||
|
||
dependencies = [
|
||
('content', '0006_lesson_duration_minutes_lesson_example_lesson_kind_and_more'),
|
||
]
|
||
|
||
operations = [
|
||
migrations.AlterModelOptions(
|
||
name='grade',
|
||
options={'ordering': [models.OrderBy(models.F('number'), nulls_last=True), 'id']},
|
||
),
|
||
migrations.AddField(
|
||
model_name='grade',
|
||
name='number',
|
||
field=models.PositiveSmallIntegerField(blank=True, help_text='شماره\u200cی پایه، ۱ تا ۱۲. خالی بماند از عنوان حدس زده می\u200cشود.', null=True, unique=True),
|
||
),
|
||
]
|