Как обновить несколько объектов одним HTML-запросом? - PullRequest
0 голосов
/ 26 июня 2019

У меня проблема, и я не могу найти решение. Мне нужно обновить значение для нескольких объектов одной формой. Если бы я сделал это один за другим, без кнопки отправки это работает нормально. Но я хочу сделать это, нажав одну кнопку.

Моя 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

1 Ответ

0 голосов
/ 27 июня 2019

Я сделал это!Просмотров:

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...