#33809 closed Bug (needsinfo)
ValueError in migrations using apps.get_model() for a ForeignKey.
| Reported by: | Jesse | Owned by: | nobody |
|---|---|---|---|
| Component: | Migrations | Version: | 4.0 |
| Severity: | Normal | Keywords: | |
| Cc: | Triage Stage: | Unreviewed | |
| Has patch: | no | Needs documentation: | no |
| Needs tests: | no | Patch needs improvement: | no |
| Easy pickings: | no | UI/UX: | no |
Description
Django 4.0.5, Python 3.9.5
I believe this is a regression of https://code.djangoproject.com/ticket/24282
Snippet of the stack trace:
File "/home/.../venv/lib/python3.9/site-packages/django/db/models/manager.py", line 85, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "/home/.../venv/lib/python3.9/site-packages/django/db/models/query.py", line 512, in create
obj = self.model(**kwargs)
File "/home/.../venv/lib/python3.9/site-packages/django/db/models/base.py", line 541, in __init__
_setattr(self, field.name, rel_obj)
File "/home/.../venv/lib/python3.9/site-packages/django/db/models/fields/related_descriptors.py", line 235, in __set__
raise ValueError(
ValueError: Cannot assign "<Foo: Foo object (...)>": "Bar.foo" must be a "Foo" instance.
This error is coming from a RunPython() function. It's using a model from apps.get_model(), querying a model instance, and then using that instance in a ForeignKey field. I assume the error is because the type from apps.get_model() isn't the same as the actual model class.
Essentially this is what it's doing:
def custom_migration_func(apps, schema_editor):
Foo = apps.get_model("foo", "Foo")
Bar = apps.get_model("bar", "Bar")
for foo in Foo.objects.all():
Bar.objects.create(foo=foo) # breaks here
I was able to workaround this by setting the ID directly:
Bar.objects.create(foo_id=foo.pk)
If adding support for this isn't feasible, the documentation should at least be updated to address this. I wasn't able to find any information regarding this in the docs.
Attachments (1)
Change History (2)
comment:1 by , 3 years ago
| Resolution: | → needsinfo |
|---|---|
| Status: | new → closed |
| Summary: | ValueError in migrations using apps.get_model for a ForeignKey → ValueError in migrations using apps.get_model() for a ForeignKey. |
by , 3 years ago
| Attachment: | ticket_33809.zip added |
|---|
Thanks for the report, however it works for me (I attached the test project). We also have a regression test that covers this use case.
Please reopen the ticket if you can debug your issue and provide a sample project that reproduces it.