【问题标题】:Distinct elements in django modeldjango模型中的不同元素
【发布时间】:2010-02-02 00:20:54
【问题描述】:

我是 Django 新手,我想知道是否有更有效的方法(在数据库级别)执行以下操作。

我有模型:

class Foo(models.Model):
    item=models.IntegerField()
    another_item=models.IntegerField()

并且想要获得“item”的所有不同值的可迭代。

这是我目前所拥有的:

distinct=set([row.item for row in Foo.objects.all()])

这很容易理解。但是,如果我了解 Django 的工作原理,那么 SQL 查询就不是很有效,因为它类似于:

SELECT * FROM DB

当我只需要时:

SELECT DISTINCT item FROM DB

有什么方法可以更有效地做到这一点?

【问题讨论】:

    标签: sql django django-models


    【解决方案1】:

    您希望将distinct 子句与valuesvalues_list 子句结合使用。

    Doc starts heredistinctvaluesvalues_list 都在里面。

    所以你可以这样做:

    Foo.objects.values_list('item', flat=True)
    

    这将返回一个项目列表 - 匹配您的 SELECT DISTINCT item FROM DB 查询。

    【讨论】:

    • 这似乎有效。你知道检查由 django 表达式生成的查询的方法吗?
    • 好的...已经问过了stackoverflow.com/questions/1074212/…
    • 太棒了..我检查过,你是 100% 正确的。谢谢 Foo.objects.all().values_list('item', flat=True).distinct() 我开始像爱 Python 一样爱 Django
    • 你不需要.all()。只需Foo.objects.values_list('item', flat=True)
    • 查看 sql:只需将 .query.as_sql() 附加到任何查询集
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-28
    • 1970-01-01
    • 2021-02-26
    • 2011-02-17
    • 1970-01-01
    相关资源
    最近更新 更多