#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.