0

我有问题,找不到决定。我需要通过一种形式更新多个对象的值。如果我一一完成,没有提交按钮,它就可以正常工作。但我想通过单击一个按钮来完成。

我的 HTML 表单:

<form method="post" action="{% url 'installmentreport-update' %}">
   {% for installmentreport in installment.installmentreport_set.all %}
      <tr>
        <td class="align-middle" style="text-align:center">{{installmentreport.title}}</td>
        <td class="align-middle" style="text-align:center">
            {% csrf_token %}
        <input type="number" name='spent' value={{installmentreport.spent}} placeholder={{installmentreport.spent}} size="8">
        <input type="hidden" name='id' value={{installment.id}}></td>
        <input type="hidden" name='pk' value={{installmentreport.id}}>

      </tr>
    {% endfor %}
    <td></td>
    <td class="align-middle" style="text-align:center"><input type="submit" class="btn btn-warning" name="submit" value="Update"></form>

意见:

class InstallmentReportUpdate(LoginRequiredMixin,PermissionRequiredMixin,UpdateView):
    model = InstallmentReport
    permission_required = 'catalog.can_change_program'
    fields = ['spent']

    def get_object(self):
        pks = self.request.POST.getlist('pk')

        for pk in pks:
            return InstallmentReport.objects.get(pk=pk)

            def form_valid(self, form):
                if self.request.method == 'POST':
                    spents = self.request.POST.getlist('spent')
                    if form.is_valid():
                        for spent in spents:
                            instance = form.save(commit=False)
                            form.instance.spent = spent
                            instance.save()
                        return super().form_valid(form)

    def get_success_url(self):
        id = self.request.POST.get('id')
        return reverse('installment-detail-owner', args=[str(id)])

我使用 Python3.7 和 Django2.2

4

1 回答 1

0

我做的!意见:

def get_object(self):
         pks=self.request.POST.getlist('pk')
         spents = self.request.POST.getlist('spent')
         for pk, spent in zip(pks,spents):
             print(pk)
             print(spent)
             InstallmentReport.objects.filter(pk=pk).update(spent=spent)
         return InstallmentReport.objects.get(pk=pk)
于 2019-06-27T09:25:45.420 回答