Django的:查询集“失去”的值

问题描述 投票:0回答:1

我有2个型号,一个与客户的名单和其他与销售的清单。我的目的是销售秩值添加到客户查询集。

all_clients = Contactos.objects.values("id", "Vendedor", "codigo", 'Nombre', "NombrePcia", "Localidad", "FechaUltVenta")
sales = Ventas.objects.all()

一旦加载我集中所有的每个客户端总结他们的销售的小计值的销售,然后命令由他们的总销售额的结果。

sales_client = sales.values('cliente').annotate(
    fact_total=Sum('subtotal'))

client_rank = sales_client .order_by('-fact_total')

然后我把这些客户的等级和值存储在同client_rank查询集一中“秩”的价值观。

a = 0
for rank in client_rank:
    a = a + 1
    rank['Rank'] = a

一切都精细到现在。当我打印模板,结果我得到的“client_rank”查询集的期望值:“客户名称” +“每个客户端的总销量” +“等级”。

{'cliente': '684 DROGUERIA SUR', 'fact_total': Decimal('846470'), 'Rank': 1}
{'cliente': '699 KINE ESTETIC', 'fact_total': Decimal('418160'), 'Rank': 2}
etc....

这里的问题开始

首先,我们应该考虑到,并非所有的“all_clients”查询集必须在“销售”查询集实际销售的客户。所以,我一定要找到哪些是有销售,分配他们的“等级”值和分配用于谁鸵鸟政策的那些标准值。

    for subject in all_clients:
    subject_code = str(client["codigo"])
    try:
        selected_subject = ranking_clientes.get(cliente__icontains=subject_code)
        subject ['rank'] = selected_subject['Rank']
    except:
        subject ['rank'] = "Some value"

因为“selected_subject” doesn't似乎HACE的“等级”值的尝试总是失败。如果我打印“selected_subject”我得到如下:

{'cliente': '904 BAHIA BLANCA BASKET', 'fact_total': Decimal('33890')}

为什么I',失去了“等级”值任何线索?原来的“客户排名”查询集仍然有包括该值。

谢谢!

python django django-queryset
1个回答
1
投票

我猜想ranking_clientes相同client_rank

问题是,.get将永远做对数据库的查询。这意味着,你在原来的查询返回的字典中所做的任何修改将不会被应用到get调用的结果。

您需要通过查询迭代找到你需要的:

selected_subject = next(client for client in ranking_clientes if subject_code in client.cliente)

请注意,如果你有很多客户,这是非常低效的。我会重新考虑你的模型结构。或者,你可以考虑使用一个database function直接作为原始查询的一部分返回军衔。

© www.soinside.com 2019 - 2024. All rights reserved.