0

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 の 2 倍)。私はこれをしたくありません。

ただし、を使用する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
4

1 に答える 1

1

コードに不自然なものは何も見られないため、重複した結果を受け取る理由がわかりません。車の 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]
于 2014-11-15T13:52:40.003 に答える