El campo fue declarado con una referencia demorada a ‘auth.user’, pero la aplicación ‘auth’ no está instalada.
Mis aplicaciones instaladas son:
INSTALLED_APPS = [
‘django.contrib.admin’,
‘django.contrib.auth’,
‘django.contrib.contenttypes’,
‘django.contrib.sessions’,
‘django.contrib.messages’,
‘django.contrib.staticfiles’,
‘django.contrib.sites’,
‘leadgenerator’,
‘leadgenerator.apps.ui’,
‘leadgenerator.apps.accounts’,
‘leadgenerator.apps.instagram’,
‘leadgenerator.apps.BorseBots’,
‘leadgenerator.apps.TelegramBorse’,
‘leadgenerator.apps.Utils’,
‘leadgenerator.apps.Blog’,
‘leadgenerator.apps.Crypto’,
‘channels’,
‘multiselectfield’,
‘django_redis’,
‘django_filters’,
‘extra_views’,
‘django_select2’,
‘compressor’,
‘django_celery_beat’,
‘crispy_forms’,
‘django_tables2’,
‘ckeditor’,
‘ckeditor_uploader’,
‘leadgenerator.ckeditor5’,
‘leadgenerator.rolepermissions’,
‘rolepermissions’,
login and login_as
‘loginas’,
‘allauth’,
‘allauth.account’,
‘allauth.socialaccount’,
‘phonenumber_field’,
blog
‘modelcluster’,
‘taggit’,
end blog
‘imagekit’,
‘pwa’
]
He usado “user” en los modelos:
from django.contrib.auth.models import User as djangoUser
class BlogPost(models.Model):
author = models.ForeignKey(djangoUser, on_delete=models.CASCADE, related_name=’blog_posts’, verbose_name=_(‘Author’))
La migración ahora es 0013.
Cuando utilizo la migración inversa de esta manera:
migrate Blog 0011
Ocurre un error:
ValueError: El campo Blog.BlogPost.author fue declarado con una referencia tardía a ‘auth.user’, pero la aplicación ‘auth’ no está instalada.
Tampoco tengo AUTH_USER_MODEL en settings.py.
Además, no puedo eliminar la base de datos porque contiene muchos datos.
¿Cuál es el problema?
Usando Django 2.2 Python 3.7 PostgreSQL.
davy.ai
El problema es que has utilizado
django.contrib.auth.models.User
como clave externa para el campoauthor
en tu modeloBlogPost
, pero la aplicaciónauth
no está incluida enINSTALLED_APPS
. Por lo tanto, cuando intentas migrar a una versión anterior de la aplicación donde se definió este campo, Django no puede encontrar la aplicaciónauth
y genera elValueError
que has mencionado.Para solucionar esto, puedes agregar
'django.contrib.auth'
a la listaINSTALLED_APPS
ensettings.py
. Alternativamente, puedes cambiar el campo de clave externa para usar el modelo personalizado de usuario definido en tu aplicación (si tienes uno) configurandoAUTH_USER_MODEL
ensettings.py
y utilizándolo en tus modelos. Sin embargo, ten en cuenta que cambiar el modelo de usuario puede ser una operación compleja y puede requerir una migración de datos.Si no puedes eliminar la base de datos y tienes demasiados datos en ella, puedes intentar hacer una copia de seguridad de la base de datos y probar los cambios en un entorno de desarrollo separado antes de aplicarlos a la base de datos de producción.