django表单无效,但没有错误消息

时间:2016-12-09 04:46:59

标签: django django-forms django-views

我有以下表格:

class SkuForm(forms.Form):
  base_item = forms.ModelChoiceField(queryset=BaseItem.objects.none())
  color_or_print = forms.ModelMultipleChoiceField(queryset=Color.objects.none())
  material = forms.ModelMultipleChoiceField(queryset=Material.objects.none())
  size_group = forms.ModelMultipleChoiceField(queryset=Size_Group.objects.none())

我的观点:

def sku_builder(request):
if request.method == "POST":
    user = request.user
    form = SkuForm(request.POST)
    if form.is_valid():
        base_item = form.cleaned_data['base_item']
        colors = filter(lambda t: t[0] in form.cleaned_data['color_or_print'], form.fields['color_or_print'].choices)
        materials = filter(lambda t: t[0] in form.cleaned_data['material'], form.fields['material'].choices)
        size_groups = filter(lambda t: t[0] in form.cleaned_data['size_group'], form.fields['size_group'].choices)
        return render(request, 'no_entiendo.html', {'colors': colors, })
    else:
        return HttpResponse("form is not valid")
user = request.user
form = SkuForm()
form.fields['base_item'].queryset = BaseItem.objects.filter(designer=user)
form.fields['color_or_print'].queryset = Color.objects.filter(designer=user)
form.fields['material'].queryset = Material.objects.filter(designer=user)
form.fields['size_group'].queryset = Size_Group.objects.filter(designer=user)
return render(request, 'Disenador/sku_builder.html', {'form': form,})

问题是我只收到“表单无效的消息”我不知道为什么它无效,因为表单只是由选项组成,所以没有拼写错误。此外,我没有从系统反馈调试,或者不知道在哪里搜索。

* form.is_valid之后发生的事情不是完整的代码

更新: 我放置了{{form.errors}}并得到了这个: color_or_print

Select a valid choice. 6 is not one of the available choices.

base_item

Select a valid choice. That choice is not one of the available choices.

size_group

Select a valid choice. 2 is not one of the available choices.

在size_group和color_or_print中,数字是pk(但只显示一个项目,2个被选中),不确定base_item中发生了什么。我应该通过:

提取值
get_object_or_404 ?

我可以用base_item做什么?这是信息的图像 posted from the debug_toolbar

2 个答案:

答案 0 :(得分:0)

尝试在模板中呈现{{form.errors}}

答案 1 :(得分:0)

如果表单无效,则需要使用表单呈现html,而不是发送HttpResponse

if form.is_valid():
    # Do your operations on the data here
    ...
    return render(request, 'no_entiendo.html', {'colors': colors, })
else:
    return render(request, 'Disenador/sku_builder.html', {'form': form,})

此外,如果您使用模型选择字段,则定义查询集的理想位置在您的表单__init__方法

def __init__(self, *args, **kwargs):
    user = kwargs.pop('user')
    self.fields['base_item'].queryset = BaseItem.objects.filter(designer=user)
    # define more querysets here as you require
    ...
    super(SkuForm, self).__init__(*args, **kwargs)

您可以在视图中更改查询集。但据我所知,这是一种覆盖你在表单中设置的内容的方法。通常应在__init__中设置。