Django请求.POST未传递给form.data



我有一个表单,但request.POST没有传递数据到我的表单。即form.data为空

我的形式
class DPStatusForm(forms.Form):
status = forms.ChoiceField(label="")
def __init__(self, excluded_choice=None, *args, **kwargs):
super().__init__(*args, **kwargs)
if excluded_choice:
status_choices = (
(s.value, s.label)
for s in DP.Status
if s.value != excluded_choice
)
else:
status_choices = ((s.value, s.label) for s in DP.Status)
self.fields["status"].choices = status_choices

视图接收表单数据

def update_status(request, id):
if request.method == "GET":
return redirect("my_app:show_dp", id)
p = get_object_or_404(DP, pk=id)
form = DPStatusForm(request.POST)
# debug statements
print(request.POST)
print(form.data)
# ...

通过两个print语句,我可以看到这个请求。POST是目前与status键填充,但形式。数据为空:

# request.POST
<QueryDict: {'csrfmiddlewaretoken': ['xxx...], 'status': ['1']}>
# form.data
<MultiValueDict: {}>

为什么是形式?数据没有被填充?

查看"excluded_choice"的值。你定义了一个额外的位置参数的形式__init__方法,这是拦截你试图传递给表单的数据。

我看到的最简单的解决方案是稍微修改一下表单__init__方法。

def __init__(self, *args, excluded_choice=None, **kwargs):

或将数据作为关键字参数传递。

form = DPStatusForm(data=request.POST)

我认为第一种更可取,因为它保留了表单类的预期行为。

相关内容

  • 没有找到相关文章

最新更新