Я пишу собственный сценарий миграции Django. В соответствии с документами django по настраиваемым миграциям я должен иметь возможность использовать свою модель относительно apps.get_model()
. Однако при попытке сделать это я получаю следующую ошибку:
AttributeError: type object 'MyModel' has no attribute 'objects'
Я думаю, это связано с тем, что реестр приложений не готов, но я не уверен.
Пример кода :
def do_thing(apps, schema_editor):
my_model = apps.get_model('app', 'MyModel')
objects_ = my_model.objects.filter(
some_field__isnull=True).prefetch_related(
'some_field__some_other_field') # exc raised here
class Migration(migrations.Migration):
atomic = False
dependencies = [
('app', '00xx_auto_xxx')
]
operations = [
migrations.RunPython(do_thing),
]
Простой оператор печати возвращаемого значения apps.get_model()
показывает следующее: <class '__fake__.MyModel'>
. Я не уверен, что это такое, и если это результат того, что я не был готов.
EDIT:
Я не смог найти никаких ресурсов, чтобы объяснить, почему я получаю __fake__
объект, поэтому я решил повозиться с кодом. Я заставил его работать, вытеснив apps
из аргументов, как можно увидеть здесь:
def do_thing(apps, schema_editor):
from django.apps import apps
my_model = apps.get_model('app', 'MyModel')
objects_ = my_model.objects.filter(
some_field__isnull=True).prefetch_related(
'some_field__some_other_field') # no more exc raised here
Я все еще не понимаю, и любая помощь будет принята с благодарностью.