如何调用Django的auth_permission模型以代码方式添加新权限?
如何导入Django的Permission模型并添加新权限
嘿,这个问题我太熟了!Django自带的auth_permission数据表对应的Python模型是Permission,你可以直接从Django的auth模块里导入它:
from django.contrib.auth.models import Permission
不过权限通常和具体业务模型绑定,所以一般还需要用到ContentType(用来关联权限对应的目标模型),它同样在auth模块中:
from django.contrib.auth.models import Permission, ContentType
给你举个贴合你习惯的实际例子:假设你有个自定义模型Book,想给它新增一个「可以发布书籍」的权限,用get_or_create的写法可以这么做:
# 先导入你的自定义模型 from myapp.models import Book # 获取Book模型对应的ContentType content_type = ContentType.objects.get_for_model(Book) # 创建或获取目标权限 permission, created = Permission.objects.get_or_create( codename='can_publish', # 权限的唯一标识,建议用小写+下划线格式 name='Can Publish Books', # 权限的友好显示名称 content_type=content_type, # 把权限和Book模型绑定 )
这里要提醒你:get_or_create方法会自动保存新建的对象,所以你不需要额外调用mdl.save(),除非之后修改了这个权限的其他字段才需要手动保存。
如果是想创建不关联任何模型的全局权限,也可以省略content_type参数,但这种场景在实际开发中很少用到,大部分权限都是和具体业务模型绑定的。
内容的提问来源于stack exchange,提问作者MrLine
相关产品推荐
相关产品推荐

