Я создаю приложение, которое позволяет добавлять предопределенные услуги в счет. Он будет использоваться психологом для выставления счетов за услуги по осмотру водителя. При создании нового счета вы можете выбрать, какую услугу вы хотите добавить в счет. Работает нормально. Я хотел бы добавить поле, где вы можете указать количество услуг, которые вы сделали, т.е. вы проверили 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)