2012-01-19 13 views
5

Nie mogę używać syncdb, ponieważ moja aplikacja używa niektórych widoków MySQL. Uruchomiłem manage.py sqlall <app>, ale to nie wyprowadza SQL dla tabeli django_content_type lub tabel autoryzacji. Spojrzałem także na ewolucję na południu i django, ale oba wymagają syncdb i nie jestem pewien, czy i tak by pomogli.Django manage.py - Tworzenie protokołów auth_permission i django_content_type

Ręcznie dodałem kilka modeli do tabel, ale robi się to frustrujące, a po zainstalowaniu aplikacji dbsettings nie jestem pewien, co muszę teraz wprowadzić.

Czy ktoś wie, w jaki sposób uzyskać manage.py (lub coś innego) do wyprowadzania SQL dla tych tabel i ich zawartości?

Dzięki.

+0

Jaki jest dokładny StackTrace? – armonge

+0

Ostatnia linia to '_mysql_exceptions.OperationalError: (1060," Zduplikowana nazwa kolumny 'ID serwera' ")' - ma to coś wspólnego z dziwnymi widokami w MySQL. Porzuciłem próbę uruchomienia syncdb, jeśli zacznę projekt od Django od nowa, użyję południa lub ewolucji. – hajamie

Odpowiedz

12

Po dokładniejszym wykopaniu znalazłem: Fixing the auth_permission table after renaming a model in Django i manage.py sql command for django models - Django.

Te wyjście stoły, ale nie dane:

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

Ale this dostaje dużo bliżej. W końcu udało mi się to następująco:

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) 

Dodaje wszystkie uprawnienia, a następnie wszystkie potrzebne typy zawartości. interactive=True oznacza, że ​​pyta Cię, czy chcesz usunąć nieaktualne typy zawartości.

+0

Do czego ten plik należy? – Zac

+0

Minęło trochę czasu, odkąd to zrobiłem, ale myślę, że właśnie korzystałem z interaktywnej konsoli. – hajamie

+0

To działało idealnie! Dzięki. –

0

@hajamie rozwiązanie działa dla starszych obsługiwanych wersji, biorąc podpowiedź, poniżej jest to, co działało dla mnie!

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

W Django 1.11 to powoduje wyjątek: 'app_label = app_config.label' \ n 'AttributeError: Obiekt" Apps "nie ma atrybutu" label ". – kunambi

+1

To działało dla mnie w Django 1.11: https://stackoverflow.com/ a/40092780 – Crag

Powiązane problemy