Создание модели на основе экземпляров другой модели с помощью наборов форм

это мой первый вопрос здесь!

Итак, я пытаюсь сделать таблицу с неоплаченными счетами (модель начислений) и полями формы для модели оплаты. Модель оплаты должна иметь такие же экземпляры как сумма, пациент, пользователь и быть связанной с этой моделью начислений. Я хочу сделать таблицу с набором форм, где я могу видеть неоплаченные счета и отмечать оплаченные счета, а затем только отправлять их. Проблема в том, что я должен использовать два цикла для неоплаченных счетов и полей набора форм для отображения их в таблице. Я сделал шаблон с полями формы в каждой строке и это неудобно перезагружать страницу после отправки. И не получается сделать связь между начислением и оплатой. Вот код:

Итак, вот models.py

class Accrual(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE,
                         related_name='accruals')
date = models.DateField(db_index=True)
amount = models.DecimalField(decimal_places=2, max_digits=10)
payment = models.ManyToManyField(to='Payment', related_name='accruals',
                                 blank=True)
info = models.CharField(max_length=200, blank=True, null=True)
paid = models.BooleanField(default=False)
patient = models.ForeignKey(to='Patient', on_delete=models.CASCADE,
                            related_name='accruals')

class Payment(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE,
                             related_name='payments')
    date = models.DateField(db_index=True)
    amount = models.DecimalField(decimal_places=2, max_digits=10)
    method = models.ForeignKey(to='Method', on_delete=models.CASCADE,
                               related_name='payments')
    info = models.CharField(max_length=200, blank=True, null=True)
    patient = models.ForeignKey(to='Patient', on_delete=models.CASCADE,
                                related_name='payments')

Как вы можете видеть, эти две модели связаны через m2m поле "оплата" в модели начисления.

views.py

class NewPaymentFormView(generic.CreateView):
model = models.Payment
form_class = forms.NewPaymentForm
template_name = 'new_new_payment.html'
success_url = reverse_lazy('index')

def get_context_data(self, *, object_list=None, **kwargs):
    context = super(NewPaymentFormView, self).get_context_data(**kwargs)
    accrual_unpaid = models.Accrual.objects.filter(
        paid=False)
    context.update({
        'accrual_unpaid': accrual_unpaid
    })
    return context

def form_valid(self, form):
    form.instance.user = self.request.user
    return super().form_valid(form)

def get_form_kwargs(self):
    kwargs = super(NewPaymentFormView, self).get_form_kwargs()
    kwargs.update({'user': self.request.user})
    return kwargs

template.html

<div class="table-responsive">
<h1 class="h-25">Начисления</h1>
<table class="table table-striped table-sm">
    <thead>
        <tr>
          <th scope="col">#</th>
          <th scope="col">Пациент</th>
          <th scope="col">Сумма</th>
            <th scope="col">Дата</th>
          <th scope="col">Оплачено</th>
          <th scope="col">Дата оплаты</th>
            <th scope="col">Метод оплаты</th>
            <th scope="col"></th>
        </tr>
    </thead>
    <tbody>
    {% for accrual in accrual_unpaid %}
        <tr>
            <td>{{ forloop.counter }}</td>
          <td>{{ accrual.patient }}</td>
          <td>{{ accrual.amount|intcomma }}</td>
          <td>{{ accrual.date }}</td>
            <form method="post" enctype="multipart/form-data">
                {% csrf_token %}
                <td>{{ form.paid }}</td>
                <td>{{ form.date }}</td>
                <td>{{ form.method }}</td>
                <td><button type="submit">Создать</button></td>
            </form>
        </tr>
    {% empty %}
        <h1 class="h2">Нет начислений</h1>
    {% endfor %}
    </tbody>
</table>
</div>

И я хотел бы, чтобы таблица выглядела так, но с одной кнопкой "submit" после. table image

Вернуться на верх