Tom*_*chý 11 django permissions
在开发期间,有时会删除或重命名应用和模型权限.什么是从权限表中清除剩余物而不破坏某些东西的好方法?
例如:我有一个带有一些权限的articles模型的应用程序Article.
class Article(models.Model):
title = ...
text = ...
class Meta:
permissions = (
('can_edit_title', 'Can edit title of article'),
('can_edit_text', 'Can edit text of article'),
)
Run Code Online (Sandbox Code Playgroud)
我通过命令添加此权限(已安装django_extension):
./manage update_permissions
Run Code Online (Sandbox Code Playgroud)
但后来我意识到,最好给它命名can_update_title.所以我改变了模型:
class Article(models.Model):
...
class Meta:
permissions = (
('can_update_title', 'Can update title of article'),
('can_update_text', 'Can update text of article'),
)
Run Code Online (Sandbox Code Playgroud)
当我更新权限时,Django管理中既有权限又对用户 - 管理员来说真的很混乱.
yuv*_*uvi 28
简短回答:在管理站点注册权限.将此添加到您的admin.py文件:
from django.contrib.auth.models import Permission
admin.site.register(Permission)
Run Code Online (Sandbox Code Playgroud)
然后你从那里控制一切.
答案很长:权限就是对象,就像django中的其他内容一样.它们保存在数据库中,并通过ManyToMany关系链接到用户和组.当您只是更改了Article模型的Meta类中的权限名称时,django无法知道您仍然像以前一样使用同一个对象,因此它创建了一个新对象.
您应该做的是,在更改模型中的权限名称后,还要更改数据库中关联权限对象的名称.
最简单的方法是使用管理站点注册Permission对象,这样您就可以从那里进行控制.您仍然需要在两个地方(models.py和您的数据库)更改它以进行任何名称更改,但管理网站使这更容易.
请记住,您创建的额外Permission对象('update')有一个新的pk,这意味着如果您只删除旧的Permission对象('edit'),它将对与之有关系的任何内容产生影响.如果您有不想丢失的数据,我建议编写一个脚本来合并两个Permission对象以避免任何错误
| 归档时间: |
|
| 查看次数: |
4616 次 |
| 最近记录: |