gpt4 book ai didi

python - 根据最新子记录的条件过滤 Django 中的模型

转载 作者:太空宇宙 更新时间:2023-11-04 01:36:59 25 4
gpt4 key购买 nike

我有两个这样的模型:

class Store(models.Model):
name = models.CharField(max_length=255)

class Order(models.Model):
store = models.ForeignKey(Store)
date = models.DateTimeField(auto_now_add=True)
success = models.BooleanField()

我想从 Store 模型中筛选出最新订单成功的所有记录,即 success == True

虽然它看起来很简单,但我在确定如何使用 ORM 查询系统完成此操作时遇到了问题。

有什么帮助吗?谢谢。

最佳答案

我的方法是:做 2 个列表,第一个带有 (id_store, last_success_date) 元组,第二个带有 (id_store, last_date) 元组:

l_succ = stores.objects.filter( 
order__success = True
).annotate(
last_success=Max('order__date')
).value_list (
'id', 'last_success'
)
#l_succ = [ (1, '1/1/2011'), (2, '31/12/2010'), ... ] <-l_succ result

l_last = stores.objects.annotate(
last_date=Max('order__date')
).value_list (
'id', 'last_date'
)
#l_last = [ (1, '1/1/2011'), (2, '3/1/2011'), ... ] <-l_last result

然后获取上次数据和上次成功日期相等的商店的商店 ID,并且您有查询:

store_success_ids =  [ k[0] for k in l_succ if k in l_last ]
#store_success_ids = [1, 5, ... ] <-store_success_ids result
#Cast l_last to dictionary to do lookups if you have a lot of stores.

result = Store.objects.filter( pk__in = store_success_ids)

这似乎是一个优雅的解决方案,只有四行代码用于复杂的查询(但有一个简单的请求)。免责声明,未经测试。

关于python - 根据最新子记录的条件过滤 Django 中的模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8892307/

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