使用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
当我尝试这个时,我得到汽车的重复结果(例如两次汽车#3),这取决于型号的数量。我不想要这个。
但是,当我使用cars = driver.car_set.all()
时,重复的结果不存在。但我希望我的车辆清单按market_date
排序。
有关如何修复此问题的指针? 我尝试使用aggregate()和distinct()但不幸的是没有解决这种情况(或者我做错了什么)。
我尝试使用distinct()
:
driver.car_set.order_by('model__market_date').distinct()
会导致重复driver.car_set.order_by('model__market_date').distinct('model__market_date')
会导致重复driver.car_set.order_by('model__market_date').distinct('pk')
收益Exception Value: SELECT DISTINCT ON expressions must match initial ORDER BY expressions
答案 0 :(得分:1)
我不知道你为什么会收到重复的结果,因为我在你的代码中看不到任何不自然的东西。 如果您只想接收车辆ID列表(没有重复项),您可以通过以下方式更改您的车辆周期:
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]