2012-01-19 73 views
5

我無法使用syncdb,因爲我的應用程序使用了一些MySQL視圖。我運行了manage.py sqlall <app>,但是這不會爲django_content_type表或auth_permission表輸出SQL。我也看了一下南方和Django的演變,但他們都需要syncdb,我不確定他們會有幫助。Django manage.py - 創建auth_permission和django_content_type表

我已經手動添加一些模型到表中,但這是越來越沮喪,並且安裝了dbsettings應用程序我不確定我現在需要輸入。

有誰知道一種方法來獲取manage.py(或其他)來輸出這些表及其內容的SQL?

謝謝。

+0

什麼是確切的堆棧跟蹤? – armonge

+0

最後一行是'_mysql_exceptions.OperationalError:(1060,「重複列名'ServerID'」)'' - 這與MySQL中一些奇怪的視圖有關。我已經放棄嘗試使syncdb工作,如果我從頭開始另一個django項目,我將使用南或演變。 – hajamie

回答

12

做了一些更多的挖掘,我發現這些: Fixing the auth_permission table after renaming a model in Djangomanage.py sql command for django models - Django

這些輸出表,而不是數據:

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

this得到了很多接近。最後,我用以下方式管理它:

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) 

這會添加所有權限,然後添加所需的所有內容類型。 interactive=True表示它詢問您是否要刪除陳舊的內容類型。

+0

這屬於哪個文件? – Zac

+0

自從我這樣做了一段時間,但我認爲我只是使用交互式控制檯。 – hajamie

+0

這工作完美!謝謝。 –

0

@hajamie解決方案適用於較老的支持版本,提示,下面是我的工作!

的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

在Django 1.11中拋出異常: 'app_label = app_config.label'\ n 'AttributeError:'應用程序的對象沒有'label'的屬性 – kunambi

+1

這對Django 1.11有效:https://stackoverflow.com/ A/40092780 – Crag