MultipleChoiceField未与表单一起提交

时间:2018-12-11 20:19:26

标签: python django

我一直在尝试使用Django和Python创建自定义管理界面,作为学习体验,所以我不想使用任何第三方应用程序或类似的工具。

当我(作为超级用户)尝试添加用户时,就会出现问题。我无法设置用户的权限。当前,我正在使用MultipleChoiceField来允许向新用户添加权限,但是问题是,即使我尝试添加新用户,每次尝试添加新用户时,都会收到错误消息Enter a list of values。选择的权限。当我不希望用户拥有任何权限时,如果将select字段留空,这也是一个问题。

我尝试创建自定义MultipleChoiceField(它是MultipleChoiceField的子类),然后覆盖to_python()validate()方法。我也尝试使用clean()方法访问数据,但是由于表单字段验证失败,因此cleaned_data字典中不存在该字段。我也尝试覆盖clean_permissions方法,但这也不起作用。在to_python()方法中,我似乎只收到select字段中的最后一项。

下面是添加用户表单,该表单允许超级用户授予新用户权限;在一个框中选择权限,然后将其添加到它下面的框中。 Add user form

下面是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词典中,并且错误仍然出现在客户端。

我对此一无所知,因此不胜感激!

0 个答案:

没有答案