Django查询:使用FK对模型实例计算对象数
这应该很容易,但由于某种原因,我很难找到它。我有以下资料:Django查询:使用FK对模型实例计算对象数,django,orm,count,foreign-keys,Django,Orm,Count,Foreign Keys,这应该很容易,但由于某种原因,我很难找到它。我有以下资料: App(models.Model): ... Release(models.Model): date = models.DateTimeField() App = models.ForeignKey(App) ... 如何查询至少有一个版本的所有应用程序对象 我开始打字: App.objects.all().annotate(release_count=Count('??????')).filter(
App(models.Model):
...
Release(models.Model):
date = models.DateTimeField()
App = models.ForeignKey(App)
...
如何查询至少有一个版本的所有应用程序对象
我开始打字:
App.objects.all().annotate(release_count=Count('??????')).filter(release_count__gt=0)
这是行不通的,因为Count并没有跨越人际关系,至少据我所知
奖金:
最后,我还希望能够按最新发布日期对应用程序进行排序。我正在考虑在应用程序中缓存最新的发布日期,使其更容易(更便宜),并在发布模型的save
方法中更新它,当然,除非有更好的方法
编辑:
我使用的是Django1.1——如果有令人信服的理由,我并不反对在预期1.2的情况下迁移到dev 您应该能够使用:
App.objects.annotate(release_count=Count('release')).filter(release_count__gt=0)\
.order_by('-release__date')
对于奖金部分,对日期字段进行非规范化似乎是目前唯一的解决方案。而且速度也相当快。在发布日期之前订购非常简单,无需进行非规范化。看我的答案。嗯,这正是我要做的,但我确信它不会起作用,所以我从未在口译员中尝试过。
App.objects \
.annotate(release_count=Count('release')) \
.(release_count__gt=0) \
.order_by('-release_count')