Django итоговая цена по элементам таблицы и транзакции таблицы - PullRequest
0 голосов
/ 24 апреля 2020

У меня есть две таблицы: позиции и транзакции, как рассчитать общую цену и как отобразить общую стоимость в шаблонах

class Items(models.Model):
    items_name = models.CharField(max_length=50)
    price = models.PositiveIntegerField()
    def __str__(self):
        return self.items_name
class Transaction (models.Model):
    items = models.ForeignKey(Items, on_delete=models.CASCADE)
    qty = models.PositiveIntegerField()

    def total_price(self):
        total = self.qty * self.items.price
        return total
    total_price = models.PositiveIntegerField(total_price)

Здесь приведен

def transaction(request):
    transactions=Transaction.objects.all()

    context={'transactions':transactionss}
    return render(request,'app/transaction.html',context)

здесь мой шаблон

{% for transaction in transactions %}


                <tr>
                    <td>{{transaction.item}}</td>
                    <td>{{transaction.qty}}</td>


                    <td><a class='btn btn-sm btn-info' 
                        href="#">
                        Update</a></td>
                    <td><a class='btn btn-sm btn-danger' 
                        href="#

                        ">Delete</a></td>
                </tr>
                {% endfor %}    
                <tr><td>
                    {{total_price}}
                </td></tr>

Я хочу отобразить полную total_price всех транзакций, например, элемент 1 с ценой 100 * количество 2 и пункт 2 с ценой 200 * количество 3. тогда общая цена будет 200 + 600 = 800. Я хочу отобразить 800 в шаблоне.

1 Ответ

1 голос
/ 24 апреля 2020

Позаботьтесь об этом, на ваш взгляд. Вы уже перехватываете все транзакции, с таким же успехом можете набрать total_price затем:

views.py

def transaction(request):
    total = 0
    transactions = Transaction.objects.all()
    for t in transactions:
        total += t.total_price()
    context = { 'transactions': transactions, 'total_price': total }
    return render(request, 'app/transaction.html', context)

Это будет l oop через транзакции получите результат функции total_price и добавьте его к промежуточной сумме. Вы отправляете эту сумму в контексте как total_price и можете вызывать ее в шаблоне представления.

Еще одна вещь:

Удалите строку total_price = models.PositiveIntegerField(total_price) - у вас уже есть функция total_price вычисление итога, это определение поля модели, которое вам не нужно или не нужно.

Ваша модель должна выглядеть следующим образом:

class Transaction (models.Model):
    items = models.ForeignKey(Items, on_delete=models.CASCADE)
    qty = models.PositiveIntegerField()

    def total_price(self):
        total = self.qty * self.items.price
        return total
...