我通过添加字段(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)