Можно ли преобразовать метод 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()
на вашу пользовательскую функцию.