我正在尝试在后端创建组和权限。
现在,我试图了解什么是content_type
参数以及在创建权限时如何使用它。
Documentation for Permission model says:
content_type¶
必需的。 django_content_type数据库表的引用,其中包含每个已安装模型的记录。
如何获取此content_type?我应该在哪里寻找?
我正在使用PosgresSQL作为数据库。
根据this other question,可以做到这一点:
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
答案 0 :(得分:1)
我们在source code [GitHub]中看到它是指ContentType
model [Django-doc]:
class Permission(models.Model): # ... name = models.CharField(_('name'), max_length=255) content_type = models.ForeignKey( ContentType, models.CASCADE, verbose_name=_('content type'), ) codename = models.CharField(_('codename'), max_length=100)
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
method获得对该内容类型的类的引用:
mypermission.content_type.model_class()