I'm not sure. Possibly you could hack up a solution with separate migration directories for each Django version you want to support, e.g. migrations_dj19, migrations_dj18, ... and then point to the correct directory with settings.MIGRATION_MODULES. I'm doubtful if that can be done elegantly when upgrading from one Django version to the next (if each directory has different migrations) but maybe it inspires a solution.
Off topic, but I'm curious why you want to support multiple versions of Django with a custom user model. Usually when I see a use case for multiple Django version support it's for reusable apps, which shouldn't contain a custom user model. https://docs.djangoproject.com/en/stable/topics/auth/customizing/#reusable-apps-and-auth-user-model On Thursday, November 24, 2016 at 5:36:03 AM UTC-5, Vlastimil Zíma wrote: > > We find out migrations with condition on Django version doesn't work. > > Let's have migrations based on Django version for user last_login: > 1. Create database > 2. Run migrations in Django 1.7 - that correctly creates table > custom_user with last_login NOT NULL > 3. Update Django to 1.9 > 4. Run migrations -> migration for auth.User is correctly ignored > 5. custom_user with last_login is NOT NULL, altough it shouldn't be. Both > migrations that should take care of it were ignored - our migration because > it was based on Django version, auth migrations because the use is swapped. > > So, what now? > > Vlastimil > > Dne středa 19. října 2016 1:57:25 UTC+2 Tim Graham napsal(a): >> >> Assuming the problem is makemigrations generating different migrations >> based on the Django version, conditionally adding operations in migrations >> with some django.VERSION checks may help. >> >> On Tuesday, October 18, 2016 at 7:12:02 AM UTC-4, Vlastimil Zíma wrote: >>> >>> Hi everyone, >>> >>> we are trying in our application to support multiple Django versions, >>> specifically 1.7 to 1.9. But we encountered a problem with >>> `User.last_login` field. We use custom User model based on >>> `AbstractBaseUser` as specified by the documentation. Everything was fine >>> in Django 1.7, but we got stuck when we wanted to add support for Django >>> 1.8, where the `last_login` was modified to allow NULL values. As >>> recommended by >>> https://docs.djangoproject.com/en/1.10/topics/migrations/#supporting-multiple-django-versions >>> >>> we have migrations generated in Django 1.7 (lowest supported version) an >>> thus `last_login` is NOT NULL, but that causes tests to fail when run in >>> Django 1.8/1.9, since code allows `last_login` to be NULL. >>> >>> We can't even redefine the field in our model, which would be the most >>> straight forward solution, but that's not allowed by Django either. >>> >>> What's the correct solution for this problem? It looks to us like there >>> are some unresolved issues regarding the model and migrations design. >>> >>> Thanks for any suggestions >>> Vlastimil >>> >> -- You received this message because you are subscribed to the Google Groups "Django users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at https://groups.google.com/group/django-users. To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/b73c1914-adce-4326-9c27-d7ac38f59f1d%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.

