5

我无法使用 syncdb,因为我的应用程序使用了一些 MySQL 视图。我已经运行manage.py sqlall <app>,但这不会输出 django_content_type 表或 auth_permission 表的 SQL。我还研究了南和 django 进化,但它们都需要同步数据库,我不确定它们是否会有所帮助。

我已经手动向表中添加了一些模型,但这令人沮丧,并且安装了 dbsettings 应用程序后,我不确定现在需要输入什么。

有谁知道让 manage.py (或其他东西)为这些表及其内容输出 SQL 的方法?

谢谢。

4

3 回答 3

12

在进行了更多挖掘之后,我发现了这些: Fixing the auth_permission table after renameing a model in Djangomanage.py sql command for django models - Django

这些输出表格,但不输出数据:

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

但这接近了。最后,我通过以下方式对其进行了管理:

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意味着它会询问您是否要删除过时的内容类型。

于 2012-01-20T10:32:14.500 回答
2

@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"
于 2017-02-09T11:10:42.683 回答
2

我找到的最简单的解决方案是安装Django Extensions,将其添加到 settings.INSTALLED_APPS 并运行:

manage.py update_permissions
于 2019-10-14T20:53:41.467 回答