【问题标题】:How to checked permissions in edit user form?如何在编辑用户表单中检查权限?
【发布时间】:2013-05-15 12:41:45
【问题描述】:

我有表格(感谢 Alasdair):

class PermissionsModelMultipleChoiceField(forms.ModelChoiceField):
    def label_from_instance(self, obj):
        return "%s" % obj.name


class UserForm(forms.ModelForm):
    first_name = forms.CharField(label=u'First name', required=True)
    last_name = forms.CharField(label=u'Last name', required=True)
    permissions = PermissionsModelMultipleChoiceField(Permission.objects.none(), widget=forms.CheckboxSelectMultiple)

    def __init__( self, *args, **kwargs ):
        super( NewUserForm, self ).__init__( *args, **kwargs )
        ctypes = ContentType.objects.filter(
            Q(app_label='articles') |
            Q(app_label='tags')
        )
        self.fields['permissions'].queryset = Permission.objects.filter(content_type__in=ctypes)

    class Meta:
        model = User

并且在模板权限中向我显示了类似这样的权限:

[] Can change article
[] Can delete article
[] Can view article

[...]

调用形式:

profile_user = User.objects.get(pk=user_id)

if request.method == 'POST':
    form = UserForm(request.POST, instance=profile_user)
    if form.is_valid():
        form.save()
        [... here will save permissions ...]
        return HttpResponseRedirect(reverse('home'))
else:
    form = UserForm(instance=profile_user)

如何在模板中设置分配给已编辑用户的权限?

【问题讨论】:

  • 我不太明白,如果用户具有特定权限,您希望将复选框显示为选中
  • 是的,例如如果用户有“可以查看文章”的权限,我想选中这个复选框

标签: django django-forms


【解决方案1】:

在实例化表单时(仅在POST 请求之外)使用参数data 填充复选框,如下所示:

profile_user = User.objects.get(pk=user_id)

if request.method == 'POST':
    form = UserForm(request.POST, instance=profile_user)
    if form.is_valid():
        form.save()
        [... here will save permissions ...]
        return HttpResponseRedirect(reverse('home'))
else:
    user_permissions_list = # place here the query to get the profile_user permissions
    form = UserForm(instance=profile_user, data={'permissions':user_permissions_list})

使用data是根据用户实际权限标记复选框的关键。

希望对你有帮助!

【讨论】:

  • 但是如何获取 user_permissions_list? user.get_all_permissions() 返回权限名称列表
  • 您使用的是什么权限引擎? django-监护人?或普通的 django 权限
  • 普通 django 权限。如果我为 exaple 设置: [...]data={'permissions':[23,24,25]} 那么它可以工作。 (23,24,25 - 权限对象的 ID)
  • 我回答了你具体提出的其他问题。
猜你喜欢
  • 2018-02-14
  • 2021-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-05
  • 1970-01-01
相关资源
最近更新 更多