Почему django 'apps.get_model () `возвращает объект` __fake __. MyModel` - PullRequest
1 голос
/ 17 июня 2020

Я пишу собственный сценарий миграции 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

Я все еще не понимаю, и любая помощь будет принята с благодарностью.

...