2012-01-19 9 views
5

Non riesco a utilizzare syncdb perché la mia app utilizza alcune viste MySQL. Ho eseguito manage.py sqlall <app>, ma questo non emette l'SQL per la tabella django_content_type o le tabelle auth_permission. Ho anche dato uno sguardo all'evoluzione del sud e del django, ma entrambi richiedono syncdb, e non sono sicuro che lo aiuterebbero comunque.Django manage.py - Creazione tabelle auth_permission e django_content_type

Ho aggiunto manualmente alcuni modelli ai tavoli, ma questo è frustrante, e dopo aver installato l'app dbsettings non sono sicuro di cosa devo ora inserire.

Qualcuno sa come ottenere manage.py (o qualcos'altro) per generare l'SQL per queste tabelle e il loro contenuto?

Grazie.

+0

Qual è lo stacktrace esatto? – armonge

+0

L'ultima riga è '_mysql_exceptions.OperationalError: (1060," Nome colonna duplicato 'ServerID' ")' - è qualcosa a che fare con alcune viste strane in MySQL. Ho rinunciato a provare a far funzionare syncdb, se avvierò un altro progetto di django partendo da zero userò il sud o l'evoluzione. – hajamie

risposta

12

Avendo fatto un po 'più di scavo, ho trovato questi: Fixing the auth_permission table after renaming a model in Django e manage.py sql command for django models - Django.

queste uscite, i tavoli, ma non i dati:

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

Ma this ottiene molto più vicino. Alla fine l'ho gestito con il seguente:

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) 

Questo aggiunge tutte le autorizzazioni e quindi tutti i tipi di contenuto necessari. interactive=True significa che ti chiede se vuoi rimuovere i tipi di contenuto obsoleti.

+0

A quale file appartiene? – Zac

+0

È da un po 'che non l'ho fatto, ma penso che stavo usando la console interattiva. – hajamie

+0

Questo ha funzionato perfettamente! Grazie. –

0

soluzione @hajamie funziona per la versione supportata più vecchia, prendendo un suggerimento, di seguito è ciò che ha funzionato per me!

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

In Django 1.11 questo solleva Eccezione: 'app_label = app_config.label' \ n ' AttributeError: 'oggetto' Apps 'non ha attributo' etichetta'' – kunambi

+1

Questo ha funzionato per me in Django 1.11: https://stackoverflow.com/ un/40092780 – Crag