簡體   English   中英

如何使用 django-guardian 在管理界面的 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM