The attached tests demonstrate 2 issues:
- The pk isn't assigned after a call to
objects.create()
, although I can confirm that the object is properly created.
pony = ShetlandPony.objects.create()
self.assertIsNot(pony.pk, None)
objects.create()
doesn't accept any arguments that refer to superclasses' fields:
>>> pony = ShetlandPony.objects.create(weight=5)
Traceback (most recent call last):
File "/Users/loic/Dev/django/tests/migrations/test_operations.py", line 544, in test_run_python
operation.database_forwards("test_runpython", editor, project_state, new_state)
File "/Users/loic/Dev/django/django/db/migrations/operations/special.py", line 141, in database_forwards
self.code(models=from_state.render(), schema_editor=schema_editor)
File "/Users/loic/Dev/django/tests/migrations/test_operations.py", line 538, in create_shetlandponies
pony2 = ShetlandPony.objects.create(weight=5)
File "/Users/loic/Dev/django/django/db/models/manager.py", line 92, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "/Users/loic/Dev/django/django/db/models/query.py", line 364, in create
obj = self.model(**kwargs)
File "/Users/loic/Dev/django/django/db/models/base.py", line 465, in __init__
raise TypeError("'%s' is an invalid keyword argument for this function" % list(kwargs)[0])
TypeError: 'weight' is an invalid keyword argument for this function
I've looked into this further, the problem wasn't how the system dealt with the migration that I've reproduced in the test case, but how I ended with this migration to begin with.
I have abstract models that inherit from concrete models to add python level functionality.
The problem is that these are ruled out by: https://github.com/django/django/blob/master/django/db/migrations/state.py#L162.
Fixing this condition doesn’t help because
Apps.get_model()
do not support abstract models and that's whatModelState.render()
uses: https://github.com/django/django/blob/master/django/db/migrations/state.py#L203I’m not sure what’s the best course of action, something specific to migrations, or a fix at the app registry level, maybe
include_abstract
akin to the existinginclude_auto_created
,include_deferred
,include_swapped
.