Estoy haciendo cambios en un modelo AppContactCnt para agregar nuevos campos para manejar la eliminación de registros. Aquí está el models.py

class AppContactCnt(models.Model):
    id_cnt = models.AutoField(primary_key=True)
    # idcst_cnt = models.IntegerField()
    idcst_cnt = models.ForeignKey(AppCustomerCst, models.DO_NOTHING, db_column='idcst_cnt')
    idctp_cnt = models.ForeignKey(AppContactTypeCtp, models.DO_NOTHING, db_column='idctp_cnt')
    idtrp_cnt = models.IntegerField()
    name_cnt = models.CharField(max_length=50)
    phone_cnt = models.CharField(max_length=50, blank=True, null=True)
    email_cnt = models.CharField(max_length=100, blank=True, null=True)
    note_cnt = models.CharField(max_length=100, blank=True, null=True)
    receives_emails_cnt = models.BooleanField(blank=True, null=True)
    deleted_cnt = models.BooleanField(blank=True, null=True)
    # date_deleted_cnt = models.DateTimeField(blank=True, null=True)
    # deleted_by_cnt = models.CharField(max_length=100, blank=True, null=True)

    class Meta:
        db_table = 'app_contact_cnt'
        app_label = 'easytrade20'

Intenté agregar managed = True sin cambios.

También probé lo siguiente: Elimine todos los archivos de migración anteriores y archivos de pycache excepto init.

python manage.py migrate --fake-initial
python manage.py makemigrations
python manage.py migrate

Sigo recibiendo No changes detected

No estoy seguro de cómo proceder, se agradece cualquier ayuda.

0
AlliDeacon 28 sep. 2020 a las 22:35

4 respuestas

La mejor respuesta

Ha configurado app_label = 'easytrade20' en la opción meta, pero Django no puede detectar una aplicación llamada easytrade20 en su proyecto. Por eso no hay cambios.

Por lo tanto, agregue easytrade20 a su INSTALLED_APPS o elimine app_label = 'easytrade20' del Meta del modelo e intente nuevamente para ejecutar sus migraciones.

3
Arakkal Abu 2 oct. 2020 a las 02:41

Prueba esto:

python manage.py makemigrations [app_name]
python manage.py migrate
1
Felix Eklöf 28 sep. 2020 a las 21:15

Problema

Es probable que la aplicación no esté listada en INSTALLED_APPS ubicada en settings.py, por lo tanto, Django no ha registrado su aplicación y no detectará migraciones que deben ejecutarse en esa aplicación.

Solución

Agregue easytrade20 a su INSTALLED_APPS y vuelva a intentar ejecutar sus migraciones.

0
pygeek 1 oct. 2020 a las 20:36

Si las respuestas anteriores no funcionaron para usted, le propongo que haga un modelo y migraciones basadas en una base de datos existente. Los pasos para completar esta tarea se describen a continuación.

A continuación, sugiero que el directorio de su aplicación también se llame easytrade20.

Creo que ya tiene una base de datos con la que está trabajando y se le han aplicado todas las migraciones. Si no es así, y guardar la estructura de las migraciones no es fundamental para usted, omita los pasos 2-3.

Si alguna de sus otras aplicaciones tiene migraciones que dependen de las migraciones de easytrade20, debe repetir los pasos 2 a 5 para cada una de ellas (cambiando el nombre de easytrade20 a su nombre de aplicación) antes de comenzar el paso 6 (y 6+ también se requieren pasos para esas aplicaciones).


0. Haga una copia de seguridad de sus archivos y base de datos antes de los cambios

1. Actualice su versión de Django a la última versión

pip install django==3.0.* -U para 3.0.X (3.0.10 es la última versión cuando escribo estas líneas)

O

pip install django==3.1.* para el último (3.1 no tiene muchas diferencias con 3.0 y tal vez sea la opción correcta para usted)

2. Compruebe si se aplican todas las migraciones

Utilice el comando showmigrations para mostrar las migraciones aplicadas :

python manage.py showmigrations

Verá una estructura con todas las aplicaciones y sus migraciones como esta (app1 y app2 por ejemplo):

app1
 [X] 0001_initial
app2
 [X] 0001_initial
 [X] 0002_some_other_migration

Verá sus aplicaciones y algunas aplicaciones de django / paquetes de terceros, como admin, auth, database, sessions, etc.

Si ve todo [X] cerca de cada migración, todo está bien, continúe.

Si ve algo de [ ] migration_name, intente aplicar estas migraciones primero. Ejecute python manage.py migrate app_name migration_name para cada migración no aplicada (sin marcar) de arriba hacia abajo para cada aplicación (app_name por ejemplo).

3.Haga nuevos modelos basados en la estructura de su base de datos

Utilice inspectdb para generar modelos :

python manage.py inspectdb > generated_models.py

Se creará el archivo generated_models.py. Debe copiar de este archivo todos los modelos que creó para la aplicación easytrade20. Reemplace su models.py con modelos generados y elimine managed = False al menos en el modelo AppContactCnt.

4. Elimina la información sobre las migraciones de easytrade20 de la base de datos

python manage.py migrate --fake easytrade20 zero

Y ahora, si ejecuta python manage.py showmigrations easytrade20, verá que no se aplicaron todas las migraciones.

5. Elimina tu directorio de migraciones

Eso es. Elimine el directorio easytrade20/migrations por completo.

Luego, si ejecuta python manage.py showmigrations easytrade20, verá el texto (no migrations)

6. Generar nuevas migraciones

Ejecute el comando makemigrations:

python manage.py makemigrations easytrade20

Se creará la carpeta easytrade20/migrations. De lo contrario, deberá verificar dos cosas:

  1. Su settings.py para asegurarse de que easytrade20 esté incluido en su INSTALLED_APPS.
  2. La configuración de la aplicación easytrade20. Asegúrese de que sus archivos tengan un código similar:
# easytrade20/__init__.py
default_app_config = 'easytrade20.apps.EasyTradeConfig'
# easytrade20/apps.py
from django.apps import AppConfig


class EasyTradeConfig(AppConfig):
    name = 'easytrade20'

7. Aplicar la migración inicial

Si tiene una base de datos con esta tabla, entonces una migración falsa:

python manage.py migrate easytrade20 --fake-initial

De lo contrario, ejecute sin --fake-initial:

python manage.py migrate easytrade20

8.Realice cambios en su modelo, cree y aplique migraciones

Cambie su archivo models.py.

Ejecute python manage.py makemigrations easytrade20. Se creará un nuevo archivo en su directorio easytrade20/migrations.

Ejecute python manage.py migrate easytrade20 para aplicar una nueva migración.

0
Yevhenii M. 4 oct. 2020 a las 08:30