Вот шаги для добавления пользовательских разрешений на User
модели:
Сначала нужно создать файл переноса, например, при приложении аутентификации,
Здесь я назвал его 0002_permission_fixtures.py
:
account (your authentication application)
|_migrations
|__ 0001_initial.py
|__ 0002_permission_fixtures.py
|__ __init__.py
Затем добавьте свои объекты разрешения, а именно:
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations
def forwards_func(apps, schema_editor):
# Get models that we needs them
user = apps.get_model("auth", "User")
permission = apps.get_model("auth", "Permission")
content_type = apps.get_model("contenttypes", "ContentType")
# Get user content type object
uct = content_type.objects.get_for_model(user)
db_alias = schema_editor.connection.alias
# Adding your custom permissions to User model:
permission.objects.using(db_alias).bulk_create([
permission(codename='add_sample', name='Can add sample', content_type=uct),
permission(codename='change_sample', name='Can change sample', content_type=uct),
permission(codename='delete_sample', name='Can delete sample', content_type=uct),
])
class Migration(migrations.Migration):
dependencies = [
('contenttypes', '__latest__'),
]
operations = [
migrations.RunPython(
forwards_func,
),
]
Чтобы выполнить эту миграцию, сначала перенесите модель contenttype
, а затем перенесите приложение (вот учетная запись).
$ python manage.py migrate contenttypes
$ python manage.py migrate account
Можете ли вы вставить свои модели и выполнить миграцию? – Udi
У меня такая же проблема. Миграция выглядит следующим образом: http://pastebin.com/avmfXHmY; 'INSTALLED_APPS = ('svsite', ..., 'django.contrib.contenttypes', '...', 'member')' и пользователь просто расширяет 'AbstractUser'. – Mark
Кажется, что ничего не получится. Все экземпляры 'Permission' 'ContentType', которые не существуют во время миграции ... – Mark