миграция данных django — переменная класса недоступна через get_model()

#django #orm #django-migrations

#django #orm #django-миграции

Вопрос:

Я пытаюсь обновить некоторые записи базы данных с помощью миграции данных Django, используя следующий файл миграции:

 from django.apps import apps
from django.db import IntegrityError, migrations

def exclude_pending_drivers(apps, schema_edition):
    Driver = apps.get_model("team", "Driver")
    pending_drivers = Driver.objects.filter(type=Driver.PENDING)
    for driver in pending_drivers:
        driver.show_in_app = False
    Driver.objects.bulk_update(pending_drivers, ['show_in_app'])

class Migration(migrations.Migration):

    dependencies = [
        ('team', '0002_add_show_in_app_to_driver'),
    ]

    operations = [
        migrations.RunPython(exclude_pending_drivers),
    ]
 

При ее запуске я получаю сообщение об ошибке:

 AttributeError: type object 'Driver' has no attribute 'PENDING'
 

PENDING определяется как переменная класса в модели:

 class Driver(models.Model):
    PENDING = 1
    CONFIRMED = 2

    show_in_app = models.BooleanField(default=True)
    # etc
 

Я могу запустить точный код миграции, приведенный выше, в a manage.py shell без ошибок, и он также работает нормально, если я использую from team.models import Driver вместо apps.get_model("team", "Driver") (хотя, очевидно, это не рекомендуется).

Что дает? Похоже, что класс драйвера, когда он включен через apps.get_model() , отличается от прямого import , но, конечно, это не так??