如何在编辑用户窗体中检查权限? [英] How to checked permissions in edit user form?

查看:113
本文介绍了如何在编辑用户窗体中检查权限?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有表单(谢谢Alasdair):

  class PermissionsModelMultipleChoiceField(forms.ModelChoiceField):
def label_from_instance self,obj):
返回%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 =

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 =用户



  []可以更改文章
[]可以删除文章
[]可以查看文章

[...]

调用表单

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

如果request.method =='POST':
form = UserForm(request.POST,instance = profile_user)
如果form.is_valid():
form.save()
[...这里会保存权限...]
return HttpResponseRedirect(reverse('home'))
else:
form = UserForm(instance = profile_user)

如何设置签入模板此权限分配给编辑的用户?

解决方案

使用参数数据填写实例化窗体时的复选框(仅在 POST之外) 请求):

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

如果request.method =='POST':
form = UserForm(request.POST,instance = profile_user)
如果表单
form.save()
[...这里将保存权限...]
返回HttpResponseRedirect(reverse('home'))
其他:
user_permissions_list =#在这里查询以获取profile_user权限
form = UserForm(instance = profile_user,data = {'permissions':user_permissions_list})
/ pre>

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



希望它有帮助!


I have form (thanks 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

And in template permissions shows me permissions something like this:

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

[...]

calling form:

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)

How to set checked in template this permissions which are assigned to edited user?

解决方案

Use the argument data to populate the checkboxes when you instantiate the form (only outside the POST request) like this:

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})

Using data is the key to mark the checkboxes according to user actual permissions.

Hope it helps!

这篇关于如何在编辑用户窗体中检查权限?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆