#33566: Issue with migrations after upgrading Django 2 to Django 3.2.
-------------------------------------+-------------------------------------
     Reporter:  Ismael Jerez         |                    Owner:  nobody
         Type:  Bug                  |                   Status:  new
    Component:  Migrations           |                  Version:  3.2
     Severity:  Normal               |               Resolution:
     Keywords:  orm, migrate,        |             Triage Stage:
  makemigrations, database,          |  Unreviewed
  migrations, migration              |
    Has patch:  0                    |      Needs documentation:  0
  Needs tests:  0                    |  Patch needs improvement:  0
Easy pickings:  0                    |                    UI/UX:  0
-------------------------------------+-------------------------------------
Changes (by Ismael Jerez):

 * status:  closed => new
 * resolution:  needsinfo =>


Comment:

 Hi again:

 Sorry, it's been a while. I cannot share my code due to confidentiality,
 but I think I found a solution.

 I was debugging migrate command to see what changes are being detected.
 Then, I have called write_migration_files(changes) from makemigrations
 command using the changes detected before. After this, I have new
 migrations created for the mentioned apps. Most of the changes are only
 verbose_name related (Spanish translations) and minor updates, so I think
 it should be safe to migrate.

 The question is: why did migrate command detect these changes (see below)
 but makemigrations did not? I think both changes autodetector should work
 the same way to avoid problems like this one.

 These are the changes detected by migrate command (but not by
 makemigrations) related to Django default apps:
 admin app:

 {{{
 # Generated by Django 3.2.13 on 2022-06-08 07:39

 from django.db import migrations, models
 import django.db.models.deletion
 import django.utils.timezone


 class Migration(migrations.Migration):

     dependencies = [
         ('base', '0012_auto_20220608_0939'),
         ('contenttypes', '0003_auto_20220608_0939'),
         ('admin', '0003_logentry_add_action_flag_choices'),
     ]

     operations = [
         migrations.AlterModelOptions(
             name='logentry',
             options={'ordering': ['-action_time'], 'verbose_name':
 'entrada de registro', 'verbose_name_plural': 'entradas de registro'},
         ),
         migrations.AlterField(
             model_name='logentry',
             name='action_flag',
             field=models.PositiveSmallIntegerField(choices=[(1,
 'Añadido'), (2, 'Modificar'), (3, 'Borrado')], verbose_name='marca de
 acción'),
         ),
         migrations.AlterField(
             model_name='logentry',
             name='action_time',
             field=models.DateTimeField(default=django.utils.timezone.now,
 editable=False, verbose_name='hora de la acción'),
         ),
         migrations.AlterField(
             model_name='logentry',
             name='change_message',
             field=models.TextField(blank=True, verbose_name='mensaje de
 cambio'),
         ),
         migrations.AlterField(
             model_name='logentry',
             name='content_type',
             field=models.ForeignKey(blank=True, null=True,
 on_delete=django.db.models.deletion.SET_NULL,
 to='contenttypes.contenttype', verbose_name='tipo de contenido'),
         ),
         migrations.AlterField(
             model_name='logentry',
             name='object_id',
             field=models.TextField(blank=True, null=True, verbose_name='id
 del objeto'),
         ),
         migrations.AlterField(
             model_name='logentry',
             name='object_repr',
             field=models.CharField(max_length=200, verbose_name='repr del
 objeto'),
         ),
         migrations.AlterField(
             model_name='logentry',
             name='user',
 field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE,
 to='base.ucauser', verbose_name='usuario'),
         ),
     ]
 }}}

 auth app:

 {{{
 # Generated by Django 3.2.13 on 2022-06-08 07:39

 import django.contrib.auth.validators
 from django.db import migrations, models
 import django.db.models.deletion
 import django.utils.timezone


 class Migration(migrations.Migration):

     dependencies = [
         ('contenttypes', '0003_auto_20220608_0939'),
         ('auth', '0012_alter_user_first_name_max_length'),
     ]

     operations = [
         migrations.AlterModelOptions(
             name='group',
             options={'verbose_name': 'grupo', 'verbose_name_plural':
 'grupos'},
         ),
         migrations.AlterModelOptions(
             name='permission',
             options={'ordering': ['content_type__app_label',
 'content_type__model', 'codename'], 'verbose_name': 'permiso',
 'verbose_name_plural': 'permisos'},
         ),
         migrations.AlterModelOptions(
             name='user',
             options={'verbose_name': 'usuario', 'verbose_name_plural':
 'usuarios'},
         ),
         migrations.AlterField(
             model_name='group',
             name='name',
             field=models.CharField(max_length=150, unique=True,
 verbose_name='nombre'),
         ),
         migrations.AlterField(
             model_name='group',
             name='permissions',
             field=models.ManyToManyField(blank=True, to='auth.Permission',
 verbose_name='permisos'),
         ),
         migrations.AlterField(
             model_name='permission',
             name='codename',
             field=models.CharField(max_length=100, verbose_name='nombre en
 código'),
         ),
         migrations.AlterField(
             model_name='permission',
             name='content_type',
 field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE,
 to='contenttypes.contenttype', verbose_name='tipo de contenido'),
         ),
         migrations.AlterField(
             model_name='permission',
             name='name',
             field=models.CharField(max_length=255, verbose_name='nombre'),
         ),
         migrations.AlterField(
             model_name='user',
             name='date_joined',
             field=models.DateTimeField(default=django.utils.timezone.now,
 verbose_name='fecha de alta'),
         ),
         migrations.AlterField(
             model_name='user',
             name='email',
             field=models.EmailField(blank=True, max_length=254,
 verbose_name='dirección de correo electrónico'),
         ),
         migrations.AlterField(
             model_name='user',
             name='first_name',
             field=models.CharField(blank=True, max_length=150,
 verbose_name='nombre'),
         ),
         migrations.AlterField(
             model_name='user',
             name='groups',
             field=models.ManyToManyField(blank=True, help_text='Los grupos
 a los que pertenece este usuario. Un usuario tendrá todos los permisos
 asignados a cada uno de sus grupos.', related_name='user_set',
 related_query_name='user', to='auth.Group', verbose_name='grupos'),
         ),
         migrations.AlterField(
             model_name='user',
             name='is_active',
             field=models.BooleanField(default=True, help_text='Indica si
 el usuario debe ser tratado como activo. Desmarque esta opción en lugar de
 borrar la cuenta.', verbose_name='activo'),
         ),
         migrations.AlterField(
             model_name='user',
             name='is_staff',
             field=models.BooleanField(default=False, help_text='Indica si
 el usuario puede entrar en este sitio de administración.',
 verbose_name='es staff'),
         ),
         migrations.AlterField(
             model_name='user',
             name='is_superuser',
             field=models.BooleanField(default=False, help_text='Indica que
 este usuario tiene todos los permisos sin asignárselos explícitamente.',
 verbose_name='estado de superusuario'),
         ),
         migrations.AlterField(
             model_name='user',
             name='last_login',
             field=models.DateTimeField(blank=True, null=True,
 verbose_name='último inicio de sesión'),
         ),
         migrations.AlterField(
             model_name='user',
             name='last_name',
             field=models.CharField(blank=True, max_length=150,
 verbose_name='apellidos'),
         ),
         migrations.AlterField(
             model_name='user',
             name='password',
             field=models.CharField(max_length=128,
 verbose_name='contraseña'),
         ),
         migrations.AlterField(
             model_name='user',
             name='user_permissions',
             field=models.ManyToManyField(blank=True, help_text='Permisos
 específicos para este usuario.', related_name='user_set',
 related_query_name='user', to='auth.Permission', verbose_name='permisos de
 usuario'),
         ),
         migrations.AlterField(
             model_name='user',
             name='username',
             field=models.CharField(error_messages={'unique': 'Ya existe un
 usuario con este nombre.'}, help_text='Requerido. 150 carácteres como
 máximo. Únicamente letras, dígitos y @/./+/-/_ ', max_length=150,
 unique=True,
 validators=[django.contrib.auth.validators.UnicodeUsernameValidator()],
 verbose_name='nombre de usuario'),
         ),
     ]
 }}}

 contenttypes app:

 {{{
 # Generated by Django 3.2.13 on 2022-06-08 07:39

 from django.db import migrations, models


 class Migration(migrations.Migration):

     dependencies = [
         ('contenttypes', '0002_remove_content_type_name'),
     ]

     operations = [
         migrations.AlterModelOptions(
             name='contenttype',
             options={'verbose_name': 'tipo de contenido',
 'verbose_name_plural': 'tipos de contenido'},
         ),
         migrations.AlterField(
             model_name='contenttype',
             name='model',
             field=models.CharField(max_length=100, verbose_name='nombre de
 la clase modelo de python'),
         ),
     ]
 }}}

 sessions app:

 {{{
 # Generated by Django 3.2.13 on 2022-06-08 07:39

 from django.db import migrations, models


 class Migration(migrations.Migration):

     dependencies = [
         ('sessions', '0001_initial'),
     ]

     operations = [
         migrations.AlterModelOptions(
             name='session',
             options={'verbose_name': 'sesión', 'verbose_name_plural':
 'sesiones'},
         ),
         migrations.AlterField(
             model_name='session',
             name='expire_date',
             field=models.DateTimeField(db_index=True, verbose_name='fecha
 de caducidad'),
         ),
         migrations.AlterField(
             model_name='session',
             name='session_data',
             field=models.TextField(verbose_name='datos de sesión'),
         ),
         migrations.AlterField(
             model_name='session',
             name='session_key',
             field=models.CharField(max_length=40, primary_key=True,
 serialize=False, verbose_name='clave de sesión'),
         ),
     ]
 }}}

-- 
Ticket URL: <https://code.djangoproject.com/ticket/33566#comment:2>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/0107018142636cca-4877a5a2-f043-406c-b3d1-ccc98e754d26-000000%40eu-central-1.amazonses.com.

Reply via email to