[英]Django related _set with order_by showing duplicates
在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
我不知道您為什么會收到重復的結果,因為在您的代碼中我看不到任何不自然的東西。 如果您只想接收汽車ID列表(無重復),則可以通過以下方式更改for周期:
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]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.