我正在研究django中的批量更新功能。我有一个表格,显示我的数据库中的数据,用户选择他们想要编辑的对象。选择后,他们会点击"批量更新"按钮,它将它们带到django ModelForm。此页面的部分视图如下:
def BulkUpdate(request):
c = {}
c.update(csrf(request))
if request.method == "POST":
pks = request.POST.getlist("selection")
selected_objects = mymodel.objects.filter(pk__in=pks)
form = BulkUpdateForm(request.POST)
print (selected_objects)
if form.is_valid():
gender = form.data['gender']
print (gender)
print (selected_objects)
return render(request, 'bulkUpdate.html', {'form': form })
第一个print (selected_objects)
成功打印在QuerySet中从先前模板中选择的所有对象。但是第二个print (selected_objects)
返回一个空白的QuerySet。例如,如果选择了三个对象,我的终端将打印
<QuerySet [<model: model object>, <model: model object>, <model: model object>]>
但提交有效表格后会打印
<QuerySet []>
<QuerySet []>
两个,因为我在我的代码中打印了两次..
我的主要问题是如何将这三个对象放入我的form.is_valid()函数中。我希望我的变量selected_objects
在两个调用中以相同的方式打印。任何帮助或建议都是惊人的。谢谢你的时间。
答案 0 :(得分:0)
def BulkUpdate(request):
if request.method == "POST":
pks = request.POST.getlist("selection")
form = BulkUpdateForm(request.POST)
pk_string = "/".join(str(i) for i in pk_list)
if form.is_valid():
url = request.path
pk_mod=url[33:].split('/')
objects = mymodel.objects.filter(pk__in=pk_mod)
gender = form.data['gender']
for i in objects:
i.gender = gender
i.save()
print('done')
return HttpResponseRedirect(pk_string)
else:
form = BulkUpdateForm(request.POST)
return render(request, 'bulkUpdate.html', {'form':form })
我成功地使用此方法获取所选对象的pk,将其保存到表单模板,同时将pk保存在url中,然后使用url去除pk并使用我之前使用的方法过滤我的对象。从那里开始,任何放入我gender
中BulkUpdateForm()
的输入都将替换所有选定对象的性别字段。感谢大家的帮助,希望我的片段可以在以后帮助某人。