Opened 4 years ago

Closed 4 years ago

Last modified 4 years ago

#21893 closed Bug (fixed)

Migrations RunPython operations seem to trip on MTI models.

Reported by: loic84 Owned by: Loic Bistuer <loic.bistuer@…>
Component: Migrations Version: 1.7-alpha-1
Severity: Normal Keywords:
Cc: Triage Stage: Accepted
Has patch: yes Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no


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(, 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/", 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/", line 141, in database_forwards
    self.code(models=from_state.render(), schema_editor=schema_editor)
  File "/Users/loic/Dev/django/tests/migrations/", line 538, in create_shetlandponies
    pony2 = ShetlandPony.objects.create(weight=5)
  File "/Users/loic/Dev/django/django/db/models/", line 92, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "/Users/loic/Dev/django/django/db/models/", line 364, in create
    obj = self.model(**kwargs)
  File "/Users/loic/Dev/django/django/db/models/", 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

Attachments (1)

test.diff (4.1 KB) - added by loic84 4 years ago.

Download all attachments as: .zip

Change History (6)

Changed 4 years ago by loic84

Attachment: test.diff added

comment:1 Changed 4 years ago by Tim Graham

Triage Stage: UnreviewedAccepted

comment:2 Changed 4 years ago by loic84

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:

Fixing this condition doesn’t help because Apps.get_model() do not support abstract models and that's what ModelState.render() uses:

I’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 existing include_auto_created, include_deferred, include_swapped.

comment:4 Changed 4 years ago by Loic Bistuer <loic.bistuer@…>

Owner: set to Loic Bistuer <loic.bistuer@…>
Resolution: fixed
Status: newclosed

In 6436f1fad9ce51f18735106ac75aeea3d6d1f310:

Fixed #21893 -- ModelState didn't account for MTI parents inherited from abstract models.

comment:5 Changed 4 years ago by Andrew Godwin <andrew@…>

In 8fcc0140d075688e7b0565dea225f4380fc638c4:

Merge pull request #2396 from loic/ticket21893

Fixed #21893 -- ModelState didn't account for MTI parents inherited from abstract models.

Note: See TracTickets for help on using tickets.
Back to Top