Python Django相关的_集合,通过显示重复项
在Django 1.7中,在我的视图中使用以下代码:Python Django相关的_集合,通过显示重复项,python,django,django-views,django-aggregation,Python,Django,Django Views,Django Aggregation,在Django 1.7中,在我的视图中使用以下代码: driver = get_object_or_404(Driver, id=self.object.id) cars = driver.car_set.order_by('model__market_date') for car in cars: # for testing only print car.id # outputs e.g. 3, 3, 3, 5 当我尝试这种方法时,我会根据车型的数量得到重复的结果(例如,两次车#
driver = get_object_or_404(Driver, id=self.object.id)
cars = driver.car_set.order_by('model__market_date')
for car in cars: # for testing only
print car.id # outputs e.g. 3, 3, 3, 5
当我尝试这种方法时,我会根据车型的数量得到重复的结果(例如,两次车#3)。我不要这个
但是,当我使用cars=driver.car\u set.all()
时,不存在重复的结果。但是我希望我的汽车清单在market\u日期进行排序
有没有关于如何解决这个问题的建议?
我尝试了aggregate()和distinct(),但不幸的是,这并没有解决问题(或者我做错了什么)
我尝试使用distinct()
:
导致重复driver.car\u set.order\u by('model\u market\u date')。distinct()
导致重复driver.car\u set.order\u by('model\u market\u date')。distinct('model\u market\u date')
产生driver.car\u set.order\u by('model\u market\u date')。distinct('pk')
Exception值:在表达式上选择distinct必须通过表达式匹配初始订单
- 我不知道您为什么会收到重复的结果,因为我看不到您的代码中有任何不自然的地方。
如果您只想接收车辆id列表(无重复项),您可以通过以下方式更改for cycle:
cars_id = [] # creating empty list for cars id with duplicates
for car in cars: # for cycle
cars_id.append(car.id) # appends numbers 3, 3, 3, 5 to our list
cars_id = list(set(cars_id)) # making list with unique values using built-in function set()
所以,在你有了这样的东西之后:
>>> cars_id
... [3, 5]
我已经删除了这个答案,编辑了你的问题,并添加了你已经尝试过的
distinct()
,谢谢@madzohan,完成了。这里有评论#只用于测试OK,通过使用set()
,例如通过上下文['cars']=set(cars)
删除重复项是有效的+1作为解决方法,但仍不明白为什么driver.car\u set.order\u by('model\u market\u date')。distinct()
仍会产生重复的结果@萨克斯,问题可能隐藏在数据库里,你查过了吗?检查里面的副本。