我刚接触到用户帐户创建视图,如下所示:
@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
选项中定义。