Django-POST-在queryset中保存多个项目

时间:2018-08-23 14:44:50

标签: django django-forms django-views

我不确定标题是否正确描述了问题。如果您的标题更具描述性,请编辑标题。

我有以下动态添加的输入字段:

enter image description here

前两行是第一个对象,第二行是第二个对象,依此类推。...我试图通过自定义post()方法将这些动态添加的元素保存到DB。 使用我当前的覆盖post()方法的版本:

if 'bha' in request.POST:
    bha_form = BHA_Form(request.POST, instance= #some_kwargs...)
    print(request.POST)

它打印以下queryset

<QueryDict: {'csrfmiddlewaretoken': [# foo_token], 'item_description': ['aaaaaaaaa', 'bbbbbbbbb'], 'num_of_jts': ['aaaaaaaaaaa', 'bbbbbbbbb'], 'length': ['aaaaaaaaaaaa', 'bbbbbbbbbb'], 'cum_length': ['aaaaaaaaaaaaa', 'bbbbbbbbbbbbbb'], 'outer_d': ['aaaaaaaaaaaaa', 'bbbbbbbbbbbbbbb'], 'inner_d': ['', ''], 'drift_d': ['', ''], 'od_cplg': ['', ''], 'top_thread': ['', ''], 'air_wght': ['', ''], 'make': ['', ''], 'sn': ['', ''], 'bha_component': ['Submit']}>

如您所见,每个输入字段以列表形式包含2个值,因为前端有两个对象。如果我仅使用bha_form.save(),它将仅将最后一个值保存在查询集列表中。这不是我想要的。我想使用类似get_or_create()方法的方法为每个动态添加的元素创建新对象,或者编辑对象(如果它们已经存在于数据库中)

我应该怎么做?我想我可以写一些长的代码来做到这一点,但只是想知道是否有任何优雅的方法可以实现这一目标。

1 个答案:

答案 0 :(得分:0)

您可以使用Django Formsets来完全满足您的要求:同时发布多个对象。这是一种非常干净的方法。

上面链接中的文档详细说明了如何使用它。