从ModelChoiceField中删除选项

时间:2018-03-20 14:03:47

标签: django django-forms

我刚接触到用户帐户创建视图,如下所示:

@login_required
def user_create(request):
    template_name = 'user/User_Create.html'
    if request.method == 'POST':
      #this part is not important
      pass
    else:
        form = UserCreateForm()
        user_error = ''

    context = {'form': form, 'user_error': user_error}
    return render(request, template_name, context)

UserCreateForm写成:

class UserCreateForm(forms.ModelForm):

    def save(self, commit=True):
        user = super(UserCreateForm,self).save(commit=False)
        username = self.cleaned_data['username'] 
        username = username.replace(".", "")
        username = username.replace("-", "")
        user.username = username
        if commit:
            user.save()
        return user

    class Meta:
        model = User
        fields = ['username', 'name', 'profile', 'redefine_password', 'name_created']
        widgets = {
            'username': forms.TextInput(),
            'name': forms.TextInput(),
            'profile': forms.Select(),
            'redefine_password': forms.CheckboxInput(),
            'name_created': forms.TextInput(),
            }

我的问题是我们有不同类型的用户(管理员,主管,支持,普通),目前,主管可以创建管理员帐户......

我最初的方法是将用户从视图传递到表单,如下所示:

form = UserCreateForm(user=request.user)

并且在表单中,如果用户不是管理员,我试图删除该选项,如下所示:

def __init__(self, *args, **kwargs):
    user = kwargs.pop('user', None)
    super(UserCreateForm, self).__init__(*args, **kwargs)
    if not user.is_superuser:
        del self.fields['profile'][1, 'Administrador']

但是失败了,我得到了TypeError: 'ModelChoiceField' object does not support item deletion

我尝试将其分配给None,但由于它既不支持item assignment也没有效果。

最后,我尝试使用forms.ModelChoiceField()属性将其分配给queryset,但我无法使其正常工作。

有人会发光吗?

修改 我想要做的是删除创建管理员帐户的选项,以防当前登录的用户不是管理员,该选项在profile选项中定义。

0 个答案:

没有答案