python django buildout django-syncdb django-1.8

python - Error de auth_user con Django 1.8 y syncdb/migrate



buildout django-syncdb (9)

Arreglo esto ejecutando auth primero, luego el resto de mis migraciones:

python manage.py migrate auth python manage.py migrate

Al actualizar a Django 1.8 (con zc.buildout) y ejecutar syncdb o migrar, recibo este mensaje:

django.db.utils.ProgrammingError: relation "auth_user" does not exist

Uno de mis modelos contiene django.contrib.auth.models.User:

user = models.ForeignKey( User, related_name=''%(app_label)s_%(class)s_user'', blank=True, null=True, editable=False )

La degradación a Django 1.7 elimina el error. ¿Debo incluir el objeto Usuario de forma diferente en Django 1.8?


En mi entorno, soluciono estas makemigrations en makemigrations en todas las aplicaciones que tienen relación con django.contrib.auth.models :

manage.py makemigrations app_with_user_relation manage.py migrate


Este problema está contenido al ejecutar "makemigrations" para todas las aplicaciones que aún no se han migrado, es decir, las aplicaciones que aún no tienen un archivo "initial_0001.py" en su directorio de migraciones.

Esto se hace (en nuestro caso usamos un makefile) ejecutando para cada una de estas aplicaciones:

manage.py makemigrations app_name

Una vez hecho esto, puedes ejecutar:

manage.py migrate

como siempre.

La causa subyacente de esto es que por alguna razón

manage.py makemigrations

no siempre crea estas migraciones iniciales si aún no están allí. Y eso conduce al mencionado error.

De lo contrario,

manage.py makemigrations app_name

Siempre los crea (si no están ya allí). Desafortunadamente no puedo entender las razones de esta asimetría.


He migrado un antiguo proyecto Django 1.6 a Django 1.8 y anteriormente hemos usado syncdb para migrar la base de datos y no tuvimos pasos de migración iniciales para todas las aplicaciones en nuestro proyecto. Con Django 1.8, necesitará una migración de base de datos que funcione. Corriendo

manage.py makemigrations <app_name>

Para todas las aplicaciones en nuestro proyecto solucionamos nuestros problemas.


Para solucionar este problema aquí es lo que hice:

1) Encuentre todos los campos de relación de clave externa como OneToOneField, ForeignKey y ManyToManyFields en su proyecto, incluidas las aplicaciones reutilizables que se refieren a auth.User o import User y auth.User en la configuración. En uso mínimo:

''auth.User''

2) Para todos los modelos que tienen lo anterior, asegúrese de que los modelos tengan una migración de django válida (no al sur). Si tienen migraciones hacia el sur, cambie el nombre del directorio a migrations_south y luego ejecute el comando makemigrations para esa aplicación:

./manage.py makemigrations affected_app

A veces hay una carpeta de migraciones de django con un nombre diferente, no el directorio de migrations predeterminado. En tales casos, haga referencia a esto a través de MIGRATION_MODULES en su settings.py:

MIGRATION_MODULES = {''filer'': ''filer.migrations_django''}

Debido a que el problema era difícil de encontrar en proyectos más grandes, comenté todas las aplicaciones personalizadas en INSTALLED_APPS en settings.py y ejecuté el comando de prueba, ya que ejecutará migrate e intentará volver a crear la base de datos:

./manage.py test

Parece que eso lo arregló para mí. No estoy seguro si el paso 1 es obligatorio o simplemente la mejor práctica. Pero definitivamente necesitas convertir las aplicaciones a migraciones.

¡Aclamaciones!

PD. Prepárate para lo que viene en Django 1.9 . El comando syncdb será eliminado. El método heredado de sincronización de aplicaciones sin migraciones se elimina, y las migraciones son obligatorias para todas las aplicaciones.


Quizás haya encontrado la respuesta y resuelto el problema, pero quería señalar que, en mi caso, el problema anterior se resolvió eliminando la base de datos y volviéndola a crear, con los privilegios completos de los usuarios. Pude hacerlo porque estoy trabajando en un entorno de no producción, pero no es una buena idea hacerlo en un entorno de ensayo, así que ten cuidado.

Estoy usando python 2.7.12 y las siguientes son las especificaciones de mi virtualenv:

Django==1.10.5 django-crispy-forms==1.6.1 django-registration-redux==1.4 djangorestframework==3.5.3 olefile==0.44 packaging==16.8 Pillow==4.0.0 psycopg2==2.6.2


Si estas usando heroku como si estuviera corriendo

heroku run python manage.py makemigrations

Esto probablemente le dará un mensaje diciendo que ahora hay cambios. Ignora eso y luego corre

heroku run python manage.py migrate

Esto le dará un resultado que sugiere que se ha hecho algo. Finalmente correr

heroku run python manage.py createsuperuser


También tuve el mismo problema, lo resolví usando estos:

python manage.py migrate auth python manage.py migrate

Luego migra hace su trabajo


Trate de referirse al Usuario usando este

from django.conf import settings user = models.ForeignKey(settings.AUTH_USER_MODEL, related_name=''%(app_label)s_%(class)s_user'', blank=True, null=True, editable=False)