Можно ли преобразовать метод python в метод базы данных djagno?

Я хочу упорядочить мой запрос по общему значению, общее значение является собственным ключом к элементам Я использую метод ниже для вычисления общей суммы .

models.py function

    def total(self):
        total=0
        for item in self.items.all():
            if item.taxed==True:
                total = total + item.amount + (item.amount*(self.tax)/(100))
            else:
                total = total + item.amount
        return total

мой запрос выглядит так:

nvoices = Invoices.objects.all().order_by()

Вы не можете передать пользовательскую функцию для упорядочивания объектов. Это потому, что order_by() фактически выполняется базой данных, которая не может выполнять код Python.

Но глядя на вашу функцию total(), которая, на мой взгляд, является в основном функцией агрегации, я думаю, вы можете получить то, что хотите, используя пользовательскую функцию агрегации, которую вам придется написать на SQL, как подробно описано здесь .

Вот пример с использованием стандартной функции SQL SUM:

from django.db.models import Sum
Invoice.objects.annotate(total=Sum('item__amount')).all().order_by('-total')

Это должно вернуть все Invoice объекты с дополнительным полем total и упорядоченные по этому полю в порядке убывания.

Теперь вы можете продолжить и заменить Sum() на вашу пользовательскую функцию.

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