Python Django过滤器具有不同的和值问题

Python Django过滤器具有不同的和值问题,python,django,Python,Django,我有以下代码: >>> y = Menu.objects.filter(level=1).values('name').distinct() >>> y [{'name': u'Desserts'}, {'name': u'Wings'}, {'name': u'Biriyani'}, {'name': u'Starters'}, {'name': u'Desserts'}, {'name': u'Starters'}, {'name': u'Biriyani

我有以下代码:

>>> y = Menu.objects.filter(level=1).values('name').distinct()
>>> y
[{'name': u'Desserts'}, {'name': u'Wings'}, {'name': u'Biriyani'}, {'name': u'Starters'}, {'name': u'Desserts'}, {'name': u'Starters'}, {'name': u'Biriyani'}]
它没有给我一个明确的结果集。如何实现不同的价值观

根据这两种解决方案,我得到了错误:

Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/Users/abhishek.yeruva/workspace/myreps/lib/python2.7/site-packages/django/db/models/query.py", line 138, in __repr__
    data = list(self[:REPR_OUTPUT_SIZE + 1])
  File "/Users/abhishek.yeruva/workspace/myreps/lib/python2.7/site-packages/django/db/models/query.py", line 162, in __iter__
    self._fetch_all()
  File "/Users/abhishek.yeruva/workspace/myreps/lib/python2.7/site-packages/django/db/models/query.py", line 965, in _fetch_all
    self._result_cache = list(self.iterator())
  File "/Users/abhishek.yeruva/workspace/myreps/lib/python2.7/site-packages/django/db/models/query.py", line 1217, in iterator
    for row in compiler.results_iter():
  File "/Users/abhishek.yeruva/workspace/myreps/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 794, in results_iter
    results = self.execute_sql(MULTI)
  File "/Users/abhishek.yeruva/workspace/myreps/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 840, in execute_sql
    cursor.execute(sql, params)
  File "/Users/abhishek.yeruva/workspace/myreps/lib/python2.7/site-packages/django/db/backends/utils.py", line 79, in execute
    return super(CursorDebugWrapper, self).execute(sql, params)
  File "/Users/abhishek.yeruva/workspace/myreps/lib/python2.7/site-packages/django/db/backends/utils.py", line 64, in execute
    return self.cursor.execute(sql, params)
  File "/Users/abhishek.yeruva/workspace/myreps/lib/python2.7/site-packages/django/db/utils.py", line 97, in __exit__
    six.reraise(dj_exc_type, dj_exc_value, traceback)
  File "/Users/abhishek.yeruva/workspace/myreps/lib/python2.7/site-packages/django/db/backends/utils.py", line 64, in execute
    return self.cursor.execute(sql, params)
ProgrammingError: SELECT DISTINCT ON expressions must match initial ORDER BY expressions
LINE 1: SELECT DISTINCT ON ("myapp_menu"."name") "myapp_...
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/Users/abhishek.yeruva/workspace/myreps/lib/python2.7/site packages/django/db/models/query.py”,第138行,在__
数据=列表(自身[:报告输出大小+1])
文件“/Users/abhishek.yeruva/workspace/myreps/lib/python2.7/site packages/django/db/models/query.py”,第162行,在__
self._fetch_all()
文件“/Users/abhishek.yeruva/workspace/myreps/lib/python2.7/site packages/django/db/models/query.py”,第965行,全部
self.\u result\u cache=list(self.iterator())
迭代器中的文件“/Users/abhishek.yeruva/workspace/myreps/lib/python2.7/site packages/django/db/models/query.py”,第1217行
对于编译器.results\u iter()中的行:
文件“/Users/abhishek.yeruva/workspace/myreps/lib/python2.7/site packages/django/db/models/sql/compiler.py”,第794行,结果文件
结果=self.execute\u sql(多)
文件“/Users/abhishek.yeruva/workspace/myreps/lib/python2.7/site packages/django/db/models/sql/compiler.py”,第840行,在execute_sql中
cursor.execute(sql,params)
文件“/Users/abhishek.yeruva/workspace/myreps/lib/python2.7/site packages/django/db/backends/utils.py”,第79行,在execute中
返回super(CursorDebugWrapper,self).execute(sql,params)
文件“/Users/abhishek.yeruva/workspace/myreps/lib/python2.7/site packages/django/db/backends/utils.py”,执行中的第64行
返回self.cursor.execute(sql,params)
文件“/Users/abhishek.yeruva/workspace/myreps/lib/python2.7/site packages/django/db/utils.py”,第97行,在__
6.重新播放(dj_exc_类型、dj_exc_值、回溯)
文件“/Users/abhishek.yeruva/workspace/myreps/lib/python2.7/site packages/django/db/backends/utils.py”,执行中的第64行
返回self.cursor.execute(sql,params)
编程错误:表达式上的SELECT DISTINCT必须按表达式匹配初始顺序
第1行:在“myapp\u菜单”“名称”“myapp\u”上选择DISTINCT。。。
使用替代值并在值列表中设置平面参数:

y = set(Menu.objects.filter(level=1).values_list('name', flat=True))
将您的值列表传递给set函数,它将创建一个具有唯一值的集合,如Joey Wilhelm write in comment。

使用替代值并在值列表中设置平面参数:

y = set(Menu.objects.filter(level=1).values_list('name', flat=True))

将您的值列表传递给set函数,它将创建一个具有唯一值的集合,如Joey Wilhelm write in comment。

作为Dima解决方案的替代方案,如果您使用的是PostgreSQL,则可以指定对哪个字段执行不同的查询,如中所述。例如:

y = Menu.objects.filter(level=1).distinct('name').values('name')

与Dima的解决方案不同,如果您使用的是PostgreSQL,则可以指定对哪个字段执行不同的查询,如中所述。例如:

y = Menu.objects.filter(level=1).distinct('name').values('name')

查看--if you using
order\u by
您正在订购的字段将包含在
DISTINCT
中。您不会在查询中显示
order\u by
,但是如果您在
菜单的
Meta
类中设置了一个,它将仍然适用。

请查看--if you using you using
order\u by
您订购的e字段将包含在
DISTINCT
中。您在查询中不显示
order\u by
,但如果您在
菜单
模型的
Meta
类中设置了一个字段,它将仍然适用。

这仍然没有给我明确的值…我得到了以下信息:[u'deserts',u'Wings',u'Biriyani',u'Starters',u'deserts',u'Starters',u'Biriyani']我用不同的('name')向Joey提到的同一个错误如果你想使用值列表,你会想做如下事情:
y=set(Menu.objects.filter(level=1)。值列表('name',flat=True))
。但是,请注意,如果这是您想要的,那么这不会给您一个查询集。这对我有效:y=Menu.objects.filter(level=1)。values\u list('name',flat=True)。order\u by('name')。distinct()这仍然没有给我不同的值…我得到了以下信息:[u'deserts',u'Wings',u'Biriyani',u'Starters',u'deserts',u'Starters',u'Biriyani']我用不同的('name')向Joey提到的同一个错误如果你想使用值列表,你会想做如下事情:
y=set(Menu.objects.filter(level=1)。值列表('name',flat=True))
。但是,请注意,如果这是您想要的,那么这不会给您提供查询集。这对我有效:y=Menu.objects.filter(level=1)。values\u list('name',flat=True)。order\u by('name')。distinct()我会在问题中发布回溯我会在问题中发布回溯哦,太棒了……这对我有效:y=Menu.objects.filter(level=1)。values\u list('name',flat=True)。order\u by('name')。distinct()噢,太棒了……这对我有用了:y=Menu.objects.filter(level=1)。values\u list('name',flat=True)。order\u by('name')。distinct()