Commit c0118ff8 authored by Simon Charette's avatar Simon Charette
Browse files

Refs #24201 -- Ignored order_with_respect_to private fields in migrations.

Thanks Tim for the review.
parent 18900e55
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -443,6 +443,9 @@ class ModelState(object):
            for key in ["unique_together", "index_together", "order_with_respect_to"]:
                if key in options:
                    del options[key]
        # Private fields are ignored, so remove options that refer to them.
        elif options.get('order_with_respect_to') in {field.name for field in model._meta.private_fields}:
            del options['order_with_respect_to']

        def flatten_bases(model):
            bases = []
+14 −0
Original line number Diff line number Diff line
@@ -9,6 +9,7 @@ from django.db.migrations.state import (
    ModelState, ProjectState, get_related_models_recursive,
)
from django.test import SimpleTestCase, override_settings
from django.test.utils import isolate_apps
from django.utils import six

from .models import (
@@ -911,6 +912,19 @@ class ModelStateTests(SimpleTestCase):
        self.assertEqual([name for name, mgr in food_state.managers], ['food_mgr'])
        self.assertEqual(food_state.managers[0][1].args, ('a', 'b', 1, 2))

    @isolate_apps('migrations', 'django.contrib.contenttypes')
    def test_order_with_respect_to_private_field(self):
        class PrivateFieldModel(models.Model):
            content_type = models.ForeignKey('contenttypes.ContentType', models.CASCADE)
            object_id = models.PositiveIntegerField()
            private = GenericForeignKey()

            class Meta:
                order_with_respect_to = 'private'

        state = ModelState.from_model(PrivateFieldModel)
        self.assertNotIn('order_with_respect_to', state.options)


class RelatedModelsTests(SimpleTestCase):