Skip to main content
 首页 » 编程设计

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

2025年05月04日46lvdongjie

我有以下代码:

>>> 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'}] 

它没有给我一个独特的结果集。我怎样才能实现不同的值(value)?

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

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_... 

请您参考如下方法:

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

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