2012-01-19 20 views
5

No puedo usar syncdb porque mi aplicación utiliza algunas vistas de MySQL. He ejecutado manage.py sqlall <app>, pero esto no genera el SQL para la tabla django_content_type o las tablas auth_permission. También he echado un vistazo a la evolución de south y django, pero ambos requieren syncdb, y no estoy seguro de que me ayuden de todos modos.Django manage.py - Crear tablas auth_permission y django_content_type

He agregado manualmente algunos modelos a las tablas, pero esto se está volviendo frustrante, y habiendo instalado la aplicación dbsettings no estoy seguro de lo que ahora necesito ingresar.

¿Alguien sabe de una manera de obtener manage.py (u otra cosa) para dar salida al SQL para estas tablas y sus contenidos?

Gracias.

+0

¿Cuál es el StackTrace exacta? – armonge

+0

La última línea es '_mysql_exceptions.OperationalError: (1060," Duplicate column name 'ServerID' ")' - tiene algo que ver con algunas vistas extrañas en MySQL. He dejado de intentar hacer funcionar el syncdb, si empiezo otro proyecto django desde el principio usaré south o evolution. – hajamie

Respuesta

12

haber hecho un poco más de excavación, encontré esto: Fixing the auth_permission table after renaming a model in Django y manage.py sql command for django models - Django.

de estas salidas, las tablas, pero no los datos:

python manage.py sql auth 
python manage.py sql admin 

Pero this obtiene mucho más cerca. Al final lo he conseguido con lo siguiente:

from django.contrib.auth.management import create_permissions 
from django.db.models import get_apps 
for app in get_apps(): 
    create_permissions(app, None, 2) 

from django.contrib.contenttypes.management import update_all_contenttypes 
update_all_contenttypes(interactive=True) 

Esto añade todos los permisos y luego todos los tipos de contenido que se necesitan. interactive=True significa que le pregunta si desea eliminar los tipos de contenido antiguo.

+0

¿A qué archivo pertenece? – Zac

+0

Ha pasado un tiempo desde que hice esto, pero creo que solo estaba usando la consola interactiva. – hajamie

+0

¡Esto funcionó perfectamente! Gracias. –

0

@hajamie solution funciona para la versión anterior compatible, dando una pista, a continuación, lo que funcionó para mí.

Django = 1.9.7

from django.contrib.auth.management import create_permissions 
from django.contrib.auth.models import Permission 
from django.apps import apps 
def fix_user_permission(): 
    """ 
    run this method via shell whenever any amendments in any of the tables is made 
    """ 
    print "fixing user permissions" 
    # delete pre-existing user permission 
    Permission.objects.all().delete() 
    apps.models_module = True 
    create_permissions(apps, verbosity=0) 
    apps.models_module = None 
    print "process completed - fixed user permissions" 
+0

En Django 1.11 esto arroja Excepción: 'app_label = app_config.label' \ n 'AttributeError: el objeto 'Apps' no tiene atributo 'label'' – kunambi

+1

Esto funcionó para mí en Django 1.11: https://stackoverflow.com/ a/40092780 – Crag

Cuestiones relacionadas