gpt4 book ai didi

python - 查询集花费太多时间

转载 作者:行者123 更新时间:2023-12-01 07:38:00 28 4
gpt4 key购买 nike

我也从数据库中计算了 3000 个项目的一些值。从选择框中选择项目时,应使用 jquery 填充字段。

我正在迭代每个项目,将其发送到字典中(项目名称作为键,变量元组作为值)并将该字典传递给 django 模板。

我正在模板中发送 auto_dict 字典。每次用户从选择框中选择值时,在 change 函数上,我都会迭代字典并获取值。页面加载时间过长。

    class Sales(models.Model): # sales detail of items
item_id = models.ForeignKey('Item', models.DO_NOTHING)
# some more fields


class Item(models.Model): # detail of items, around 3000 items
name = models.CharField(max_length=127)
# some more fields


class Order(models.Model): # order detail of each order
order_number = models.CharField(max_length=63, unique=True)
created_at = models.DateField(auto_now_add=True)
status = models.CharField(max_length=2, choices=STATUS, blank=True, null=True, default='NP')
final_approval = models.CharField(max_length=3,default='No')
order_type = models.CharField(max_length=2, blank=True, null=True, choices=ORDER_TYPE)
# some more fields


class Orderitems(models.Model): # item detail for all order
qty = models.IntegerField()
item_id = models.ForeignKey(Item, models.DO_NOTHING, blank=True, null=True)
order_id = models.ForeignKey(Order, models.DO_NOTHING, blank=True, null=True)
sales_id = models.ForeignKey(Sales, models.DO_NOTHING, blank=True, null=True)
# some more fields

--------编辑部分---------

我想要所有的总和(创建日期和今天之间的差异)。

created_at = models.DateField(auto_now_add=True)

我正在使用这个:

current_date = datetime.date.today()

time_diff = OrderItemTable.objects.annotate(days=Sum((F('prev_order_items__order_id__created_at')-current_date)))

但是给出的答案是这样的 181715600.0。我想要这样的东西:

第一个订单 - 2019 年 1 月 7 日,差异= 4 天 * 2(数量)

第二次订单 - 2019 年 3 月 7 日,差异 - 2 天 * 3(数量)

总和 = 14

我还没有在查询中添加乘积的乘法部分。

这适用于每个项目。

最佳答案

我认为您可以在单个查询中执行一些操作。例如:

假设您有 related_names定义如下:

class OrderOrderitemsTable(...):
item = models.ForeignKey(Item, related_name='prev_order_items')

class OrderItemSales(...):
item = models.ForeignKey(Item, related_name='sales_order_items')

然后您可以使用 aggregation 运行这样的查询:

OrderItemTable.objects.annotate(
prev_sum_order=Sum('item__prev_order_items__qty')
).annotate(
sale_sum_order=Sum('item__sale_order_items__qty')
).annotate(
rating=F('sale_sum_order')/F('sale_sum_order')
).annotate(
in_wirehouse = Sum('item__qty_in_ferma_warehouse')
)
.values(
'prev_sum_order',
'sale_sum_order',
'rating',
'in_wirehouse'
)

关于python - 查询集花费太多时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56881339/

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