﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
29745	Argument based equality check of BaseExpression causes unstable migration state	bacilla	Simon Charette	"Changing a model's meta option `ordering` that contains expressions causes Django to generate an infinite number of migrations.

Test model:
{{{#!python
from django.db import models
from django.db.models.functions import Cast, Concat, Right


class TestEntity(models.Model):
    some_property = models.TextField()

    class Meta:
        ordering = ('some_property',)
}}}

Makemigrations log:
{{{#!bash
$ python manage.py makemigrations app
Migrations for 'app':
  app/migrations/0001_initial.py
    - Create model TestEntity
}}}

Then `ordering` have been changed.

{{{#!python
class TestEntity(models.Model):
    some_property = models.TextField()

    class Meta:
        ordering = (
            Cast(models.Func(models.F('some_property'), models.Value('^\d+'), function='SUBSTRING'), models.IntegerField()),
            Right(Concat(models.Value('00000'), models.F('some_property')), models.Value(5))
        )
}}}

Makemigrations log:
{{{#!bash
$ python manage.py makemigrations app
Migrations for 'app':
  app/migrations/0002_auto_20180907_1712.py
    - Change Meta options on testentity
$ python manage.py makemigrations app
Migrations for 'app':
  app/migrations/0003_auto_20180907_1713.py
    - Change Meta options on testentity
$ python manage.py makemigrations app
Migrations for 'app':
  app/migrations/0004_auto_20180907_1713.py
    - Change Meta options on testentity
}}}"	Bug	closed	Migrations	2.0	Normal	fixed	migration meta ordering expression		Accepted	1	0	0	0	0	0
