【问题标题】:Django forms and django-guardian: showing filtered list of UserObjectPermissionsDjango 表单和 django-guardian:显示过滤后的 UserObjectPermissions 列表
【发布时间】:2014-10-15 06:03:11
【问题描述】:

我希望管理员能够分配/删除 django-guardian 权限给一个人,以及它们与项目对象的关系,基于该对象可用的权限。

屏幕看起来像这样:

项目在 URL 中提供,视图可以看到。我创建了一个将项目作为输入的自定义表单,如下所示:

from django import forms
from django.contrib.auth.models import User
from guardian.shortcuts import get_perms_for_model

class ProjectAssignmentForm(forms.Form):
    def __init__(self, *args, **kwargs):
        self.p = kwargs.pop('project')
        self.perms = [(x, x) for x in get_perms_for_model(self.p)]
        super(ProjectAssignmentForm, self).__init__(*args, **kwargs)
        self.fields['permission'].widget = forms.CheckboxSelectMultiple()

    user = forms.ModelChoiceField(queryset=User.objects.all())  
    permission = forms.ChoiceField(choices=self.perms)

这目前给了我一个 NameError,我想是因为我在 __init__ 方法之外使用了 self。我做错了什么?

【问题讨论】:

    标签: python django permissions django-guardian


    【解决方案1】:

    嗯,这很尴尬。这是答案 - 我几乎得到它:

    from django import forms
    from django.contrib.auth.models import User
    from guardian.shortcuts import get_perms_for_model
    
    class ProjectAssignmentForm(forms.Form):
      def __init__(self, *args, **kwargs):
        super(ProjectAssignmentForm, self).__init__(*args, **kwargs)
        self.fields['permission'].widget = forms.CheckboxSelectMultiple(
            choices=[(x, x) for x in get_perms_for_model(kwargs.pop('project'))])
    
      user = forms.ModelChoiceField(queryset=User.objects.all())  
      permission = forms.MultipleChoiceField()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-27
      • 1970-01-01
      • 1970-01-01
      • 2021-06-14
      相关资源
      最近更新 更多