gpt4 book ai didi

Django Rest Framework,数据库查询优化

转载 作者:搜寻专家 更新时间:2023-10-30 22:06:42 24 4
gpt4 key购买 nike

我刚开始使用 ORM 执行数据库调用,但我很难找到优化代码/查询的好方法。

我有可以在 ProductGroups 中的 Products。产品可以有 0 到 n 个价格。 Price 由其 ActorLocation 及其值定义。我想显示 ProductGroup 中所有产品的价格的最小值和最大值。

我编写的代码可以正常工作,但由于数据库访问量的原因,速度非常慢。任何有助于朝着好的方向发展的帮助将不胜感激:)

模型:

class ProductGroup(OwnedClass):
name = models.CharField(max_length=200, blank=False)

class Product(models.Model):
name = models.CharField(max_length=200, blank=True)
internal_code = models.CharField(max_length=200, blank=True)
description = models.CharField(max_length=1000, blank=True)
product_group = models.ForeignKey(
ProductGroup, blank=True, null=True, on_delete=models.CASCADE)

class Price(models.Model):
price_without_taxes = models.FloatField(default=None, null=True)
location = models.ForeignKey(
ActorLocation, blank=True, null=True, on_delete=models.CASCADE)
product = models.ForeignKey(Product, on_delete=models.CASCADE)

class ActorLocation(models.Model):
name = models.CharField(max_length=200, blank=False, null=False)

这是我生成发送到我的 ProductGroupSerializer 的上下文的函数:

def get_context(product_groups):
locations = company.actor_locations.all()

for product_group in product_groups:
price_list = []
products = product_group.product_set.all()

for product in products:
for location in locations:
price = Price.objects.filter(product=product, location=location).last()
if price:
price_list.append(price.price_without_taxes)

if price_list:
context = {'lowest_product_price': round(min(price_list), 2), 'highest_product_price': round(max(price_list), 2)}
else:
context = {'lowest_product_price': "", 'highest_product_price': ""}

contexts[product_group.id] = context

return contexts

最佳答案

你可以试试aggregates-over-a-queryset ,例如:

from django.db.models import Max, Min

locations = company.actor_locations.all()
Price.objects.annotate(
lowest_product_price=Min(price_without_taxes),
highest_product_price=Max(price_without_taxes)
).filter(
product__product_group__in=product_groups,
location__in=locations
).values(
'lowest_product_price', 'highest_product_price')

关于Django Rest Framework,数据库查询优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50324819/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com