Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django:从下拉列表保存输入时,保存选项值而不是实际值_Python_Django_Django Forms_Django Templates - Fatal编程技术网

Python Django:从下拉列表保存输入时,保存选项值而不是实际值

Python Django:从下拉列表保存输入时,保存选项值而不是实际值,python,django,django-forms,django-templates,Python,Django,Django Forms,Django Templates,在我的问题开始之前,我想说我对Django很陌生,所以请温柔一点。提前谢谢 我有两个下拉框,所有团队表单和产品表单(都是ModelChoiceField) 我保存已发布输入的方式是: if request.method == 'POST': pattern = request.POST.get('pattern') team = request.POST.get('teams') product = request.POST.get('products') pub

在我的问题开始之前,我想说我对Django很陌生,所以请温柔一点。提前谢谢

我有两个下拉框,所有团队表单和产品表单(都是ModelChoiceField)

我保存已发布输入的方式是:

if request.method == 'POST':
    pattern = request.POST.get('pattern')
    team = request.POST.get('teams')
    product = request.POST.get('products')
    pub_date = timezone.now()
    team_obj = Sys_team(pattern=pattern, sys_team=team, product=product, pub_date= pub_date, alert= "[CPU]")
    team_obj.save()


context = {

'all_form' : All_team_Form(),
'product_form' : Product_Form()

}

return render(request, 'test4.html', context)
模板:

<td>              
{% for a in all_form %}
   {{a}} 
{% endfor %}
</td>

{所有形式的a的百分比%}
{{a}
{%endfor%}
当前我遇到的问题是,当它保存Sys_team对象时,它会得到我假设的所有表单的默认选项值,即数字。当我在python shell中打印出所有表单时,它会以以下格式显示一个列表:
thestuffIwant


我读过的很多文档都说我应该包括
{{A}
。但是,当我尝试这样做时,它会在下拉列表的上方添加一个包含所有选项的普通列表,从而将下拉列表弄乱。非常感谢您的帮助

您必须首先验证表单,并使用form.u数据而不是request.POST

if request.method == 'POST':
    all_form = All_team_Form(request.POST)
    product_form = Product_Form(request.POST)
    if all_form.is_valid() and product_form.is_valid():
        pattern = request.POST.get('pattern')
        team = all_form.cleaned_data.get('teams')
        product = product_form.cleaned_data.get('products')
        pub_date = timezone.now()
        team_obj = Sys_team(pattern=pattern, sys_team=team, product=product, pub_date= pub_date, alert= "[CPU]")
        team_obj.save()
else:
    all_form = All_team_Form()
    product_form = Product_Form()

context = {

'all_form' : all_form,
'product_form' : product_form,

}

return render(request, 'test4.html', context)

解决了我的问题。我刚刚在modelformqueryset中添加了一个额外的参数

teams=forms.modelcooicefield(queryset=All\u teams.objects.All().order\u by('team\u name')、to\u field\u name=“team\u name”)


我只使用表单加载下拉列表,并决定不使用表单保存数据,因为我没有将用户输入保存到表单中。我有多个下拉列表(所有不同的表单)和其他用户输入,我想保存到我的一个模型中。仅仅使用request.POST.get('xxxx')比声明每个表单模型更容易,也可能更有效

嗯,是的。Django的表单将返回与对象关联的
值。通过执行
All\u teams.objects.get(pk=team)
,您可以使用get来获取所需的关联对象。从规范的Django角度来看,您的代码有很多错误。如果request.method==“POST”和all\u form.is\u valid():
将表单分配给
all\u form
变量后,应首先验证表单。我感觉到您正在尝试使用Django的其余部分,而不使用Django的模型和表单之间的耦合。您应该在视图和模板中使用表单。这会让你的生活更轻松。你能再解释一下当我初始化all_form变量(all_form=all_team_form(request.POST))时传递了什么吗。在运行is_valid方法时,我不断地得到false,即使我在pythonshell中硬编码team字段
if request.method == 'POST':
    all_form = All_team_Form(request.POST)
    product_form = Product_Form(request.POST)
    if all_form.is_valid() and product_form.is_valid():
        pattern = request.POST.get('pattern')
        team = all_form.cleaned_data.get('teams')
        product = product_form.cleaned_data.get('products')
        pub_date = timezone.now()
        team_obj = Sys_team(pattern=pattern, sys_team=team, product=product, pub_date= pub_date, alert= "[CPU]")
        team_obj.save()
else:
    all_form = All_team_Form()
    product_form = Product_Form()

context = {

'all_form' : all_form,
'product_form' : product_form,

}

return render(request, 'test4.html', context)