Python Django post数据由于值位于列表中而导致错误

Python Django post数据由于值位于列表中而导致错误,python,django,forms,Python,Django,Forms,我试图从表单POST获取数据,但数据中的某个值导致错误: ipdb> request.POST <QueryDict: {'assign_to-autocomplete': [''], 'tasks': ['18'], 'csrfmiddlewaretoken': ['lVqkbkYdz42uTtLJviRIj3OukcwqsdvI'], 'assign_to': ['14'], 'action_type': ['assign_to']}> 我正在使用autocomplete

我试图从表单
POST
获取数据,但数据中的某个值导致错误:

ipdb> request.POST
<QueryDict: {'assign_to-autocomplete': [''], 'tasks': ['18'], 'csrfmiddlewaretoken': ['lVqkbkYdz42uTtLJviRIj3OukcwqsdvI'], 'assign_to': ['14'], 'action_type': ['assign_to']}>
我正在使用
autocomplete\u灯
作为
assign\u to
字段,这是一个
用户

assign_to
是一个PK列表,这似乎导致了一个问题

views.py:

class TasksPreviewView(MyMixin, FormView):
    ''' An intermediate page '''
    template_name = 'tasks/task_preview.html'

    def post(self, request):
        import ipdb; ipdb.set_trace()
        self.action_type = request.POST['action_type']
        form_class = self.get_form()
        self.form = form_class(data=dict(request.POST))

        if self.form.is_valid():
            return self.form_valid(self.form)
        else:
            return self.form_invalid(self.form)
forms.py:

class TaskBulkAssignToForm(forms.ModelForm):
    tasks = forms.ModelMultipleChoiceField(queryset=Task.objects.all(), label='')
    assign_to = al.ModelChoiceField('UserStaffAutocomplete', queryset=User.objects.all(), required=True, label='Select a user')

    def __init__(self, *args, **kwargs):
        ''' Filter down to the tasks of interest and set tasks as a hidden field '''
        super().__init__(*args, **kwargs)
        task_pks = (self.initial or self.data)['tasks']
        self.fields['tasks'].queryset = self.fields['tasks'].queryset.filter(
            pk__in=task_pks,
        )
        self.fields['tasks'].widget.attrs['class'] = 'hidden'

    def post_valid(self):
        ''' Called by form_valid '''
        # Do some processing
        # Return a success message

    def post_invalid(self):
        ''' Called by form_invalid '''
        # Return an error message

    class Meta:
        model = Task
        fields = ('tasks', 'assign_to')
因此,我的表单始终无效,因为它不需要列表:
django.core.exceptions.ValidationError:[“选择一个有效的选项。该选项不是可用的选项之一。”]
而不是像
'14'
那样的
['14']
,在
请求中传递
['14']
。如果我手动将值调整为
'14'
,而不是
['14']
continue
,则表单会按照预期运行良好


在某些上下文中,
TasksPreviewView
类似于中间页面。每个批量操作都有自己的形式(在本例中,
assign_to
action)。第一个页面重定向到带有表单的中间页面,但保留GET中的所有对象。第二页(确认页)执行
POST
。有人能帮我解决这个问题吗?

不要将
请求转换为
命令。将
转换为
命令,您应该能够直接将其传递给:

例如:

self.form = form_class(data=request.POST)

这是因为request.POST是多值dict的一个实例,允许每个键有多个值。

而不是将
request.POST
转换为
dict
,您应该能够直接将其传入:

例如:

self.form = form_class(data=request.POST)
这是因为request.POST是多值dict的一个实例,它允许每个键有多个值