повторно используемый код для миграций Django, который работает также вне миграций - PullRequest
1 голос
/ 17 февраля 2020

Речь идет о массовом создании пользователей, групп и других экземпляров в 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 внутри миграций?

...