Django: как создать объект ContentType для разрешения? - PullRequest
1 голос
/ 05 мая 2019

Я пытаюсь создать в бэкэнде группы и разрешения.

Теперь я пытаюсь понять, что такое аргумент content_type и как его использовать при создании разрешения.

Документация для модели разрешений гласит :

content_type¶

Обязательно.Ссылка на таблицу базы данных django_content_type, которая содержит запись для каждой установленной модели.

Как я могу получить этот content_type?Где мне его искать?

Я использую PosgresSQL в качестве базы данных.

Согласно этот другой вопрос , можно сделать так:

from django.contrib.auth.models import User, Group, Permission
from django.contrib.contenttypes.models import ContentType

content_type = ContentType.objects.get(app_label='app_name', model='model_name')
permission = Permission.objects.create(codename='can_create_hr',
                                       name='Can create HR',
                                       content_type=content_type) # creating permissions
group = Group.objects.get(name='HR')
group.permissions.add(permission)

Но опять же, что внутри app_label='app_name', model='model_name':
content_type = ContentType.objects.get(app_label='app_name', model='model_name')?

Структура моего проекта:

stickers-gallito-app
    |_cart
    |_shop

1 Ответ

1 голос
/ 05 мая 2019

Как мы видим в исходном коде [GitHub] , это относится к ContentType модели [Django-doc] :

class Permission(models.Model):

    #  ...

    name = models.CharField(_('name'), max_length=255)
    <b>content_type</b> = models.ForeignKey(
        <b>ContentType</b>,
        models.CASCADE,
        verbose_name=_('content type'),
    )
    codename = models.CharField(_('codename'), max_length=100)

A ContentType - это модель для ссылки на классы моделей.Если вы установите приложение contentype, Django будет поддерживать такую ​​таблицу и «поддерживать» ее: это означает, что если вы добавите дополнительную модель, Django автоматически добавит запись в модель ContentType.Вы можете видеть эти значения в своей базе данных (обычно в таблице django_content_type).

Класс модели определен в app, и у этого приложения есть метка.Кроме того, модель также имеет само название.Например, для модели User мы видим:

>>> from django.contrib.auth.models import User
>>> User._meta.app_label
'auth'
>>> User._meta.model_name
'user'

Таким образом, модель можно указать с помощью app_label и model_name.

. Например, вы можете получитьссылка на класс этого типа содержимого с помощью метода model_class :

mypermission.content_type.<b>model_class()</b>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...