具有筛选的Queryset的组权限的自定义表单

时间:2010-08-06 13:43:49

标签: django django-forms django-queryset

我需要提供一个from,用户可以在其中管理与某个Group相关联的权限。

我想使用来自django的forms.ModelForm功能,但我无法理解如何修改字段循环的查询集。我还深入研究了contrib.admin和contrib.auth,以发现这些表单的生成位置,但找不到它。

我正在尝试不使用普通的modelForm,因此已经设置了先例设置。

这就是场景。我已经为我的项目添加了40个(或多或少)权限,所有这些权限都以'xxxxx'开头,所以我想这样做:

class PermissionGroup(forms.ModelForm):
#permissions = forms.ModelMultipleChoiceField(queryset = Permission.objects.filter(codename__startswith = 'xxxxx.'), widget=forms.CheckboxSelectMultiple) 
class Meta:
    model = Group
    fields = ('permissions',)

如何实现结果?或者我如何将先前权限绑定到普通form.ModelForm?

提前致谢!

1 个答案:

答案 0 :(得分:5)

class PermissionGroup(forms.ModelForm):
    permissions = forms.ModelMultipleChoiceField(Permission.objects.none(), widget=forms.CheckboxSelectMultiple)

    def __init__( self, pass_a_Q_object=None, *args, **kwargs ):
        super( PermissionGroup, self ).__init__( *args, **kwargs )
        if pass_a_Q_object:
            self.fields['permissions'].queryset = Permission.objects.filter(pass_a_Q_object)