【问题标题】:The code should filter events from the future, but it does not代码应该过滤来自未来的事件,但它没有
【发布时间】:2017-10-05 13:05:11
【问题描述】:

我有旧 django 版本的项目 - 1.5(我知道最好更新到新版本,但现在这不是问题)。

我有与纯 sql 连接的代码 - 我只想拥有来自未来的事件 - 显示在列表中。

这是我的代码 - 我从过去得到事件的某种原因。 我尝试不使用 MIN(date),但出现错误:

用作表达式的子查询返回多于一行

@register.assignment_tag
def get_teasers():
    return Teaser.objects.extra(select={'next_activity': 'SELECT MIN(date) FROM productions_activity WHERE productions_activity.production_id = home_teaser.production_id'}).filter(Q(online__lte=now()), Q(online_end__gte=now()) | Q(online_end__isnull=True)).order_by('next_activity')

【问题讨论】:

  • 你确定要使用 sql 吗?.. 我没有看到 home_teaser 来自或加入
  • @VaoTsun 你现在可以查看代码吗?
  • 它可能会执行某种横向子查询?.. 抱歉 - 我不明白 SELECT MIN(date) FROM productions_activity WHERE productions_activity.production_id = home_teaser.production_id' 是如何工作的,因为它不应该孤立地工作

标签: python django database postgresql filter


【解决方案1】:

在句尾加.last()

【讨论】:

  • 我收到一个错误:'QuerySet' object has no attribute 'last'
  • 你是对的,它在 django 1.5 中不存在尝试在语句末尾使用类似 .order_by('next_activity')[-1] 的命令
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多