簡體   English   中英

Django通過顯示重復項與order_set相關

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM