Django manage.py - Создание таблиц auth_permission и django_content_type - PullRequest
5 голосов
/ 19 января 2012

Я не могу использовать syncdb, потому что мое приложение использует некоторые представления MySQL. Я запустил manage.py sqlall <app>, но это не выводит SQL для таблицы django_content_type или таблиц auth_permission. Я также взглянул на развитие юга и django, но им обоим требуется syncdb, и я не уверен, что они все равно помогут.

Я вручную добавил некоторые модели в таблицы, но это разочаровывает, и, установив приложение dbsettings, я не уверен, что мне теперь нужно вводить.

Кто-нибудь знает способ заставить manage.py (или что-то еще) выводить SQL для этих таблиц и их содержимого?

Спасибо.

Ответы [ 2 ]

12 голосов
/ 20 января 2012

Сделав немного больше копания, я нашел следующее: Исправление таблицы auth_permission после переименования модели в Django и manage.py sql для моделей django - 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 означает, что он спрашивает вас, хотите ли вы удалить устаревшие типы контента.

1 голос
/ 09 февраля 2017

@ Решение hajamie работает для более старой поддерживаемой версии, с подсказкой, вот что сработало для меня!

Джанго = 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"
...