【问题标题】:django values list get values only oncedjango values list 只获取一次值
【发布时间】:2015-06-07 18:07:31
【问题描述】:

我想要一个列表,其中包含仅出现一次的查询集中的值。

我查看了this post,但这似乎对我不起作用。

例子:

CharacterJournal.objects.order_by("date").values_list("reftypeid", flat=True).distinct()

返回如下内容:

[97, 96, 97, 97, 97, 97, 97, 97, 42, 42, 42,  52, 42, 42, 1, 42, '...(remaining elements truncated)...']

请帮忙。

【问题讨论】:

    标签: django distinct django-queryset


    【解决方案1】:

    请参阅distinct [1] 上的文档中的注释:

    在 order_by() 调用中使用的任何字段都包含在 SQL SELECT 列中。当与 distinct() 一起使用时,这有时会导致意想不到的结果。如果您按相关模型中的字段排序,这些字段将被添加到选定的列中,否则它们可能会使重复的行看起来不同。由于额外的列不会出现在返回的结果中(它们只是为了支持排序),因此有时看起来返回的结果不明确。

    同样,如果您使用 values() 查询来限制选择的列,任何 order_by() (或默认模型排序)中使用的列仍将涉及并可能影响结果的唯一性。

    换句话说,因为您是按date 排序的,所以查询会返回一对(date, reftypeid),并在这对上执行DISTINCT 子句。 date 后来因为 values_list 而被删除,但没有额外删除重复的 reftypeid 条目。

    【讨论】:

    • 有办法解决吗?因为我的班级元数据已经订购了列表。 (粗略的我可以使用 set(returned_list) 只是认为会有一种 django 方式来做到这一点
    • 只调用order_by()不带参数清除排序。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-21
    • 2021-12-22
    • 2022-12-01
    • 2016-02-02
    • 2013-09-25
    相关资源
    最近更新 更多