【问题标题】:Django Queryset: column reference is ambiguous with extra querysetDjango Queryset:列引用与额外的查询集不明确
【发布时间】:2015-02-18 14:37:25
【问题描述】:

我有下一个查询集:

Article.objects.filter(finished=True, updated_at__range=[start, end]).extra(
    select={'hour': 'extract(hour from updated_at)'}).values('hour').annotate(categorized=Count('id'))

我得到了错误:

“ProgrammingError:列引用“updated_at”不明确 第 1 行:SELECT (extract(hour from updated_at)) AS "hour", COUNT("art..."

我该怎么办?

编辑: 查询集无需按日期“updated_at__range=[start,end]”过滤即可工作,但我需要该过滤器。

【问题讨论】:

    标签: python django django-queryset django-postgresql


    【解决方案1】:

    如果您通过网络搜索来到这里:当我将 prefetch_relatedselect_related 语句添加到我的过滤器时,我开始遇到错误 column reference "created" is ambiguous

    虽然最初我的查询 .extra(where=['EXTRACT(hour from created) >19 OR EXTRACT(hour from created) <6']) 有效,但在添加 select_related/prefetch) 时它停止工作。

    解决方案是在字段名称前添加myappname_mymodelname.

    【讨论】:

    • 只需 2 美分:类似“class CaseModel”之类的“mymodelname”将是“casemodel”
    【解决方案2】:

    这与 Django 无关。您正在插入原始 SQL(extract 子句),但未能限定 updated_at 来自其中的表。假设 Article 模型位于名为“myapp”的应用程序中,它会是这样的:

    select={'hour': 'extract(hour from myapp_article.updated_at)'})
    

    【讨论】:

    • 查询集无需按日期“updated_at__range=[start, end]”过滤即可工作,但我需要该过滤器
    猜你喜欢
    • 2015-01-05
    • 1970-01-01
    • 2016-02-21
    • 2018-07-12
    • 1970-01-01
    • 2017-08-29
    • 2016-02-16
    • 1970-01-01
    • 2020-02-26
    相关资源
    最近更新 更多