【问题标题】:Django queryset order by related model with distinctDjango queryset order by 相关模型与不同
【发布时间】:2015-10-26 05:03:34
【问题描述】:

我有以下两种型号:

class Show(models.Model):
    name = models.CharField(max_length=100)
    is_active = models.BooleanField(default=True)

class Episode(models.Model):
    start = models.DateTimeField()
    series = models.ForeignKey('Show', related_name='episodes')

我想检索Show 的所有实例,其中is_active 设置为True,并且至少有1 个Episode。我遇到问题的部分是我还希望Show 实例按相关的Episode start 字段排序,并且Show 实例是唯一的。

这可以通过单个查询来实现吗?

我尝试过的:

Show.objects.annotate(
    e_count=Count('episodes')
).filter(
    e_count__gt=0,
    is_active=True,
).order_by('episodes__start').distinct()

【问题讨论】:

  • 尝试按剧集开始时间的MAX() 排序。见this question
  • 谢谢!我没有想到。 :-)

标签: python django django-models


【解决方案1】:

按照 Anonymous 的建议,我使用 Min 实现了这一点。

Show.objects.filter(
    is_active=True,
).annotate(
    e_count=Count('episodes'),
    start=Min('episodes__start'),
).filter(
    e_count__gt=0,
    start__gt=timezone.now(),
).order_by('start')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-06
    • 2015-08-27
    • 2021-04-15
    • 1970-01-01
    • 1970-01-01
    • 2018-09-14
    • 2018-10-27
    • 2016-11-19
    相关资源
    最近更新 更多