我一直在尝试使用Django和Python创建自定义管理界面,作为学习体验,所以我不想使用任何第三方应用程序或类似的工具。
当我(作为超级用户)尝试添加用户时,就会出现问题。我无法设置用户的权限。当前,我正在使用MultipleChoiceField
来允许向新用户添加权限,但是问题是,即使我尝试添加新用户,每次尝试添加新用户时,都会收到错误消息Enter a list of values
。选择的权限。当我不希望用户拥有任何权限时,如果将select
字段留空,这也是一个问题。
我尝试创建自定义MultipleChoiceField
(它是MultipleChoiceField
的子类),然后覆盖to_python()
和validate()
方法。我也尝试使用clean()
方法访问数据,但是由于表单字段验证失败,因此cleaned_data
字典中不存在该字段。我也尝试覆盖clean_permissions
方法,但这也不起作用。在to_python()
方法中,我似乎只收到select
字段中的最后一项。
下面是添加用户表单,该表单允许超级用户授予新用户权限;在一个框中选择权限,然后将其添加到它下面的框中。
下面是MultipleChoiceField
all_permissions = ((i+1, str(perm)) for i, perm in enumerate(Permission.objects.all()))
selected_permissions = forms.MultipleChoiceField(choices=all_permissions,
widget=forms.Select(attrs={'multiple': ''}), required=False)
selected_permissions.validate = None
正如您所看到的,我给每个权限一个数字(在HTML value
的{{1}}属性中)。出于某种原因,除非我直接指定option
HTML属性,否则它不会呈现为多个select
框。
基本上,我不希望django检查multiple
是否为空,而只是检查select
中的值是否有效(通常如此)并将这些值提交给视图,以便我可以向用户添加必要的权限。
由于我收到错误select
,因此表单的Enter a list of values
方法显然返回False。
我可以访问表单的is_valid()
字段,该字段为我提供了所需的所选权限列表,但是表单的验证失败,并且所选权限不在data
词典中,并且错误仍然出现在客户端。
我对此一无所知,因此不胜感激!