我很好奇是否有任何方法可以在 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
.
其次,最好阅读一下警告说明在有关使用的文档中distinct()
。上面的例子可以工作,但是所有的组合distinct()
and values()
不得。
PS: 这是一个好主意,使用小写名称对于模型中的字段。在您的情况下,这意味着重写您的模型,如下所示:
class ProductOrder(models.Model):
product = models.CharField(max_length=20, primary_key=True)
category = models.CharField(max_length=30)
rank = models.IntegerField()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)