Fixed #27217 -- Fixed crash in CreateModel optimization with models that use mixins.

Thanks Simon Charette for review.
This commit is contained in:
Tim Graham 2016-09-28 10:04:52 -04:00 committed by GitHub
parent 9e07a9b5fe
commit a44fc008c4
2 changed files with 12 additions and 2 deletions

View File

@ -109,7 +109,10 @@ class CreateModel(ModelOperation):
return True return True
# Check we didn't inherit from the model # Check we didn't inherit from the model
models_to_check = [base for base in self.bases if base is not models.Model] models_to_check = [
base for base in self.bases
if base is not models.Model and isinstance(base, (models.base.ModelBase, six.string_types))
]
# Check we have no FKs/M2Ms with it # Check we have no FKs/M2Ms with it
for fname, field in self.fields: for fname, field in self.fields:
if field.remote_field: if field.remote_field:

View File

@ -4,11 +4,12 @@ import unittest
from django.db import connection, migrations, models, transaction from django.db import connection, migrations, models, transaction
from django.db.migrations.migration import Migration from django.db.migrations.migration import Migration
from django.db.migrations.operations import CreateModel
from django.db.migrations.state import ProjectState from django.db.migrations.state import ProjectState
from django.db.models.fields import NOT_PROVIDED from django.db.models.fields import NOT_PROVIDED
from django.db.transaction import atomic from django.db.transaction import atomic
from django.db.utils import IntegrityError from django.db.utils import IntegrityError
from django.test import override_settings, skipUnlessDBFeature from django.test import SimpleTestCase, override_settings, skipUnlessDBFeature
from .models import FoodManager, FoodQuerySet, UnicodeModel from .models import FoodManager, FoodQuerySet, UnicodeModel
from .test_base import MigrationTestBase from .test_base import MigrationTestBase
@ -2414,3 +2415,9 @@ class SwappableOperationTests(OperationTestBase):
with connection.schema_editor() as editor: with connection.schema_editor() as editor:
operation.database_forwards('test_rminigsw', editor, project_state, new_state) operation.database_forwards('test_rminigsw', editor, project_state, new_state)
operation.database_backwards('test_rminigsw', editor, new_state, project_state) operation.database_backwards('test_rminigsw', editor, new_state, project_state)
class TestCreateModel(SimpleTestCase):
def test_references_model_mixin(self):
CreateModel('name', [], bases=(Mixin, models.Model)).references_model('other_model')