尝试在另一个函数中使用表单输入时,Django TypeError缺少1个必需的位置参数

时间:2018-07-29 17:22:37

标签: django django-forms django-views

我真的是菜鸟。

我想做的是使用来自ModelForm的输入(要显示的类别)并将其传递给另一个函数,该函数将在下一页相应地呈现一个表。

这是我views.py的第一个功能

def index(request):
    form1 = PrimarySearchForm(request.POST)
    if form1.is_valid():
        return results(request, form1.cleaned_data['actor'])
    template = 'main/index.html'
    context = {'form1': form1}
    return render(request, template, context)

这是views.py中的第二个功能

def results(request, actor):
    table = FactTable(Sawn_Areas_Fact.objects.get(actors=actor))
    RequestConfig(request).configure(table)
    return render(request, 'main/results.html', {'table': table})

这是表格     class PrimarySearchForm(forms.ModelForm):

class Meta:
    model = Actors_Dim
    fields = ('actor',)

因此,当我运行服务器时,选择一个条目并单击“提交”,我将收到以下错误消息:

TypeError: results() missing 1 required positional argument: 'actor'
[29/Jul/2018 17:10:04] "POST /results/ HTTP/1.1" 500 59914

在此先感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

您的代码没有按照您的要求进行。日志显示您的表单根本没有发布到索引视图;它正在发布到结果视图。当然是因为这就是您在模板中的form标记的action属性中添加的内容。

实际上,您不应同时执行任何一项操作;您应该发布索引,但是在表单有效时,然后重定向到结果。

答案 1 :(得分:0)

ModelForm中是否需要actor字段? form1.cleaned_data['actor']返回一个空字符串,这就是您收到此错误的原因。进行打印声明,然后检查form1.cleaned_data ['actor']是否按预期返回字符串。