Почему агрегации не работают корректно в миграциях Django?

Когда я импортирую настоящую модель и выполняю на ней запрос, я получаю правильный ответ. Когда я использую поддельную "историческую" модель из apps.get_model(), я получаю неправильный ответ.

Миграция

from django.db import migrations
from django.db.models import Count


from advisors.models import PlanShareRequest
print(PlanShareRequest.objects.values("advisor_id", "plan_id").annotate(cnt=Count('id')).filter(cnt__gt=1))


def forward(apps, schema_editor):
    PlanShareRequest = apps.get_model("advisors", "plansharerequest")
    print(PlanShareRequest.objects.values("advisor_id", "plan_id").annotate(cnt=Count('id')).filter(cnt__gt=1))


class Migration(migrations.Migration):

    dependencies = [
        ('plans', '0037_autoshare'),
        ("advisors", "0046_drop_advisor_logout"),
    ]

    operations = [
        migrations.RunPython(forward, migrations.RunPython.noop),
    ]

Выход

odigity@mypc:~/src/proj$ ./manage.sh migrate advisors 0047
<QuerySet [{'advisor_id': UUID('46bb6c3c-dfb6-40b2-9fd3-4cb5c413bf8a'), 'plan_id': UUID('9c789523-3319-4b2c-8192-27b43b2d5991'), 'cnt': 2}]>
Operations to perform:
  Target specific migration: 0047_plansharerequest_unique, from advisors
Running migrations:
  Applying advisors.0047_plansharerequest_unique...<QuerySet []>
 OK

Update

То же самое происходит с distinct().

Если я запущу это в оболочке Django:

print(len(PlanShareRequest.objects.values("advisor_id", "plan_id")))
print(len(PlanShareRequest.objects.values("advisor_id", "plan_id").distinct()))

я получаю 115 и 114 соответственно. Но если я запускаю его внутри миграции, используя модель из apps.get_model(), я получаю 115 и 115. distinct() ничего не делает.

Вернуться на верх