在django中选择DISTINCT各个列?

我很好奇,是否有任何一种方法可以在Django中进行查询,而该查询并非SELECT * FROM...位于下方。我正在尝试执行“ SELECT DISTINCT columnName FROM ...”

具体来说,我有一个看起来像这样的模型:

class ProductOrder(models.Model):

Product = models.CharField(max_length=20, promary_key=True)

Category = models.CharField(max_length=30)

Rank = models.IntegerField()

其中Rank是内的排名Category。我希望能够遍历所有类别,对该类别中的每个等级进行一些操作。

我想先获取系统中所有类别的列表,然后查询该类别中的所有产品,然后重复进行直到处理完每个类别。

我宁愿避免使用原始SQL,但是如果我必须去那里,那很好。尽管我以前从未在Django / Python中编写过原始SQL。

回答:

从数据库中获取不同列名列表的一种方法是与distinct()结合使用values()

对于你的情况,可以执行以下操作以获取不同类别的名称:

q = ProductOrder.objects.values('Category').distinct()

print q.query # See for yourself.

# The query would look something like

# SELECT DISTINCT "app_productorder"."category" FROM "app_productorder"

这里有几件事要记住。首先,这将返回ValuesQuerySet与的行为不同的QuerySet。当你说出q(上面的)第一个元素时,你会得到一个字典,而不是的实例ProductOrder

其次,最好阅读文档中有关using 的警告说明distinct()。上面的例子可以工作,但所有的组合distinct(),并values()可能不会。

PS:在模型中的字段中使用小写字母是一个好主意。在你的情况下,这意味着重写模型,如下所示:

class ProductOrder(models.Model):

product = models.CharField(max_length=20, primary_key=True)

category = models.CharField(max_length=30)

rank = models.IntegerField()

以上是 在django中选择DISTINCT各个列? 的全部内容, 来源链接: utcz.com/qa/427609.html

回到顶部