2012-01-19 33 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