首页 文章

将对象变量传递给django中的' form.is_valid(): '函数

提问于
浏览
-2

我正在研究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 . 任何帮助或建议都是惊人的 . 感谢您的时间 .

1 回答

  • 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 })
    

    我成功地使用此方法在url中获取pk 's of the objects selected, take it to a form template while saving the pk',然后使用url去除pk并使用我之前使用的方法过滤我的对象 . 从那里,在我的 BulkUpdateForm() 中输入 gender 的任何输入都将替换所有选定对象的性别字段 . 感谢大家的帮助,希望我的片段可以在以后帮助某人 .

相关问题