I am writing a custom Django migration script. As per the django docs on custom migrations, I should be able to use my model vis-a-vis apps.get_model(). However, when trying to do this I get the following error:
AttributeError: type object 'MyModel' has no attribute 'objects'
I think this has to do with the apps registry not being ready, but I am not sure.
Sample code:
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),
]
A simple print statement of apps.get_model()'s return value shows the following:
<class '__fake__.MyModel'>. I'm not sure what this is, and if it is a result of not being ready.
EDIT:
I couldn't find any resources to explain why I am getting a __fake__ object so I decided to tinker with the code. I got it to work by preempting apps from args, as can be seen here:
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
I am still confused and any help would be appreciated.