Речь идет о массовом создании пользователей, групп и других экземпляров в Django, а также повторном использовании одного и того же кода создания в обычном приложении и в миграциях.
Существует проблема в RunPython
, когда код пытается использовать некоторые модели, импортированные обычным способом.
Например, ниже верно для запуска миграции (apps
- django.db.migrations.state.StateApps
аргумент)
from django.contrib.auth.models import User
assert apps.ready
assert User != apps.get_model('auth', 'User')
>>> User
<class 'django.contrib.auth.models.User'>
>>> app.get_model('auth', 'User')
<class '__fake__.User'>
>>> type(app.get_model('auth', 'User'))
<class 'django.db.models.base.ModelBase'>
Тогда использование обоих типов моделей вместе приведет к TypeError
, например:
TypeError: 'Group' instance expected, got <Group: Bots>
Конечно, вопрос состоит в том, как избежать изменений в коде, но чтобы код работал с обеими моделями (миграции и обычное приложение)
я вынужден загружать команды Django внутри миграций?