#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
, но, конечно, это не так??