我正在为电子商务制作商店,类别和客户的汇总报告。基本上,我试图实现这个函数的功能:
from django.db.models import ExpressionWrapper, DecimalField, F, Sum
from .models import Order
def get_report_data(stores, categories, customers):
result = []
for store in stores:
for category in categories:
for customer in customers:
total = Order.objects.filter(
store=store,
orderitem__product__category=category,
customer=customer,
).aggregate(
total=Sum(
ExpressionWrapper(
F("orderitem__product__price") * F("orderitem__quantity"),
output_field=DecimalField(),
)
)
)["total"]
result.append([store, customer, category, total])
return result
显然,这是有效的穷人,我试图把这个函数变成一个查询。我试过下面的方法,但我知道我错过了很多。
total = (
Order.objects.filter(
store__in=stores,
customer__in=customers,
orderitem__product__category__in=categories,
)
.values("store", "orderitem__product__category")
.annotate(
total=Sum(
ExpressionWrapper(
F("orderitem__product__price") * F("orderitem__quantity"),
output_field=DecimalField(),
)
)
)
)
我该怎么做?
非常感谢!
如果使用基于DRF函数的视图,则不需要序列化器。查看文档https://www.django-rest-framework.org/api-guide/views/并尝试使用DRF @api_view decorator作为正常的django视图函数
将以下视图函数替换为您的数据查询,并在Response({})
中作为数据上下文键值传递@api_view(['GET', 'POST'])
def hello_world(request):
if request.method == 'POST':
return Response({"message": "Got some data!", "data": request.data})
return Response({"message": "Hello, world!"})