![](/img/trans.png)
[英]django-guardian how to make object inherit permissions of related object?
[英]How to add group choices in the Object Permissions form of the admin interface with django-guardian?
在django
項目中使用guardian
,我希望管理員能夠通過管理界面分配 object 權限。 使用guardian
這是可能的,但是管理界面中的Object 權限表單,組字段是一個TextField
。 我如何使它成為一個包含所有現有組作為選擇的ChoiceField
?
是否有只需要在應用程序的admin.py
文件中添加代碼的解決方案,還是我們必須覆蓋一些guardian
代碼? 我們怎樣才能在不guardian
Guardian 功能的情況下做到這一點? 這是我的admin.py
文件:
from django.contrib import admin
from .models import MyModel
from guardian.admin import GuardedModelAdmin
class MyModelAdmin(GuardedModelAdmin):
pass
admin.site.register(MyModel, MyModelAdmin)
這是一個像魅力一樣工作的解決方案。 第一個子類 GuardedModelAdminMixin
from guardian.admin import GuardedModelAdmin, GuardedModelAdminMixin
class CustomGuardedModelAdminMixin(GuardedModelAdminMixin):
def get_obj_perms_group_select_form(self, request):
"""
Returns form class for selecting a group for permissions management. By default :form:`GroupManage` is
returned. This enhancement returns GroupModelManage instead, allowing admins to get a queryset of groups.
"""
return GroupModelManage
然后為覆蓋 clean_group function 的組定義 ModelManager:
class GroupModelManage(forms.Form):
"""
Extends the Django Guardian GroupManage class to select User from a query containing all
User objects rather than a blank input CharField.
"""
group = forms.ModelChoiceField(queryset=Group.objects.all())
def clean_group(self):
"""
Returns ``Group`` instance based on the given group name.
"""
try:
return self.cleaned_data['group']
except Group.DoesNotExist:
raise forms.ValidationError(self.fields['group'].error_messages['does_not_exist'])
最后,在您的管理員 class 中使用新的 Mixin:
class MyModelAdmin(CustomGuardedModelAdminMixin, admin.ModelAdmin):
pass
admin.site.register(MyModel, MyModelAdmin)
要在用戶級別執行自定義查詢集,請在新的 mixin 中使用此 function:
def get_obj_perms_user_select_form(self, request):
return UserModelManage
一個完整的例子在這里: 鏈接
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.