代码之家  ›  专栏  ›  技术社区  ›  AIT HRA

自定义表单以供用户在admin Wagtail中添加/编辑

  •  0
  • AIT HRA  · 技术社区  · 1 年前

    我通过添加字段(drm,cpm)在Wagtail中定制了用户配置文件。如何根据当前登录的用户及其权限修改表单,或者更具体地说,修改表单列表中的值?

    大家好,我通过添加字段(drm,cpm)在Wagtail中定制了用户配置文件。如何根据当前登录的用户及其权限修改表单,或者更具体地说,修改表单列表中的值?

    例如,假设您已经扩展了Wagtail中的用户配置文件模型,以包括自定义字段drm和cpm,并且您希望根据用户的角色或权限在表单中动态填充选择字段。以下是如何处理此问题:

    # in models.py
    
    from django.db import models
    from wagtail.users.models import UserProfile
    
    class CustomUserProfile(UserProfile):
        drm = models.CharField(max_length=50, blank=True, null=True)
        cpm = models.CharField(max_length=50, blank=True, null=True)
    
    
    

    接下来,您可以为Wagtail管理页面创建一个自定义表单,并根据用户的配置文件覆盖表单字段:

    # in admin.py
    
    from wagtail.contrib.modeladmin.options import ModelAdmin
    from wagtail.contrib.modeladmin.views import CreateView, EditView
    from wagtail.contrib.modeladmin.helpers import PermissionHelper
    from .models import CustomUserProfile
    
    class CustomUserProfilePermissionHelper(PermissionHelper):
        def user_can_edit_obj(self, user, obj):
            # Customize this method to check if the user has permission to edit this profile
            return True  # For demonstration purposes, allowing all users to edit
    
    class CustomUserProfileEditView(EditView):
        permission_helper_class = CustomUserProfilePermissionHelper
    
        def get_form(self):
            form = super().get_form()
    
            user = self.request.user
    
            if user.is_superuser:
                form.fields['drm'].choices = [('admin', 'Administrator'), ('user', 'User')]
            else:
                form.fields['drm'].choices = [('user', 'User')]
    
            return form
    modeladmin_register(CustomUserProfileEditView)
    
    
    0 回复  |  直到 1 年前
    推荐文章