Поле количества для каждой услуги в приложении для выставления счетов - django - PullRequest
0 голосов
/ 13 июля 2020

Я создаю приложение, которое позволяет добавлять предопределенные услуги в счет. Он будет использоваться психологом для выставления счетов за услуги по осмотру водителя. При создании нового счета вы можете выбрать, какую услугу вы хотите добавить в счет. Работает нормально. Я хотел бы добавить поле, где вы можете указать количество услуг, которые вы сделали, т.е. вы проверили 10 водителей, поэтому вам нужна только одна позиция с количеством, равным 10, в счете-фактуре. Моя проблема похожа на эту

Мне нужна ваша помощь. Как проще всего этого добиться?

Я пытался использовать inline_formset, но безуспешно. Я пробовал:

FormSet = inlineformset_factory(Service, ServiceItem, fields=('quantity',))

, но не смог.

Другая моя идея состоит в том, что во время создания счета-фактуры я хотел бы отображать текстовое поле для каждой «Услуги», где Я могу указать количество. Если количество больше 0, будет создан элемент услуги.

Пожалуйста, помогите мне, потому что я уже потерял много времени, работая над ним безрезультатно. Я, наверное, не понимаю чего-то важного. Пожалуйста, помогите мне разобраться.

models.py

class Service(models.Model):
    name = models.CharField(max_length=100)
    price = models.FloatField()

class Invoice(models.Model):
    payment_method_choice = [
        ('przelew', 'przelew'),
        ('gotowka', 'gotówka')]

    number = models.CharField(max_length=30)
    company = models.ForeignKey(Company, on_delete=models.CASCADE)
    payment_method = models.CharField(verbose_name='forma płatności', max_length=75, choices=forma_platnosci_wybor)
    date = models.DateField()
    invoice_timestamp = models.DateTimeField()
    discount = models.IntegerField(verbose_name='rabat [%]', blank=True, null=True)
    services = models.ManyToManyField(Service, verbose_name='usługi')

class ServiceItem(models.Model):
    service = models.ForeignKey(Service, on_delete=models.CASCADE)
    invoice = models.ForeignKey(Invoice, on_delete=models.CASCADE)
    quantity= models.PositiveIntegerField(default=1)

views.py

class NewInvoice(generic.CreateView):
    model = Invoice
    template_name_suffix = "_new"
    form_class = NewInvoiceForm
    success_url = reverse_lazy('invoices:list')
    now = datetime.datetime.now()

    def next_invoice_number(self):
        year = self.now.strftime("%Y")
        month = self.now.strftime("%m")
        last_invoice = Invoice.objects.all().last()
        if last_invoice is not None:
            last_invoice_number = last_invoice.numer.split("/")
            if last_invoice_number[1] == month or last_invoice_number[2] == year :
                invoice_number = int(last_invoice_number[0]) + 1
            else:
                invoice_number = 1
        else:
            invoice_number = 1

        new_invoice_number = str(invoice_number) + '/' + str(month) + '/' + str(year)

        return new_invoice_number

    def form_valid(self, form):
        obj = form.save(commit=False)
        obj.number= self.next_invoice_number()
        obj.invoice_timestamp = self.now
        obj.save()

        return super(NewInvoice, self).form_valid(form)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...