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),具体取决于模型的数量。我不想要这个。

但是,当我使用时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 回答