通过 django-admin 添加自定义权限,而服务器是 运行
adding custom permission through django-admin, while server is running
在 Django-admin 中,是否可以制作功能,以便管理员可以在服务器 运行 时通过 django-admin create/edit/delete 某些权限?
在django-admin中我希望可以列出权限,具有编辑创建和删除功能
在模型 class 的元子 class 中使用权限将通过迁移脚本创建自定义权限。
摘自 https://docs.djangoproject.com/en/1.8/topics/auth/customizing/#custom-permissions
class Task(models.Model):
...
class Meta:
permissions = (
("view_task", "Can see available tasks"),
("change_task_status", "Can change the status of tasks"),
("close_task", "Can remove a task by setting its status as closed"),
)
这将在 auth_permission
(和 django_content_type
)上插入值
但这需要数据库迁移,这意味着不太可能由用户(管理员)完成,而是由开发人员完成。而且我认为应用程序有必要能够在服务器 运行.
时管理权限、创建、编辑、删除
那么使用 Django 实现此功能的最佳实践是什么?我是否应该继续使用 migrate 并在每个模型中创建它们,并在每次我们实施新权限或一般功能时重新加载服务器?谢谢
您可以将 Permission
模型注册到管理员视图:
from django.contrib.auth.models import Permission
from django.contrib import admin
admin.site.register(Permission)
代码可以在执行它的任何地方,但是您的应用程序的 admin.py
可能是一个直观的地方来粘贴它。之后,您将能够查看、编辑和删除权限。
您还需要 select_related
因为它会导致一堆 SQL 查询
from django.contrib import admin
from django.contrib.auth.models import Permission
@admin.register(Permission)
class PermissionAdmin(admin.ModelAdmin):
def get_queryset(self, request):
qs = super().get_queryset(request)
return qs.select_related('content_type')
在 Django-admin 中,是否可以制作功能,以便管理员可以在服务器 运行 时通过 django-admin create/edit/delete 某些权限?
在django-admin中我希望可以列出权限,具有编辑创建和删除功能
在模型 class 的元子 class 中使用权限将通过迁移脚本创建自定义权限。 摘自 https://docs.djangoproject.com/en/1.8/topics/auth/customizing/#custom-permissions
class Task(models.Model):
...
class Meta:
permissions = (
("view_task", "Can see available tasks"),
("change_task_status", "Can change the status of tasks"),
("close_task", "Can remove a task by setting its status as closed"),
)
这将在 auth_permission
(和 django_content_type
)上插入值
但这需要数据库迁移,这意味着不太可能由用户(管理员)完成,而是由开发人员完成。而且我认为应用程序有必要能够在服务器 运行.
那么使用 Django 实现此功能的最佳实践是什么?我是否应该继续使用 migrate 并在每个模型中创建它们,并在每次我们实施新权限或一般功能时重新加载服务器?谢谢
您可以将 Permission
模型注册到管理员视图:
from django.contrib.auth.models import Permission
from django.contrib import admin
admin.site.register(Permission)
代码可以在执行它的任何地方,但是您的应用程序的 admin.py
可能是一个直观的地方来粘贴它。之后,您将能够查看、编辑和删除权限。
您还需要 select_related
因为它会导致一堆 SQL 查询
from django.contrib import admin
from django.contrib.auth.models import Permission
@admin.register(Permission)
class PermissionAdmin(admin.ModelAdmin):
def get_queryset(self, request):
qs = super().get_queryset(request)
return qs.select_related('content_type')