Python Django相关的_集合,通过显示重复项

Python Django相关的_集合,通过显示重复项,python,django,django-views,django-aggregation,Python,Django,Django Views,Django Aggregation,在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 当我尝试这种方法时,我会根据车型的数量得到重复的结果(例如,两次车#

在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\u set.all()
时,不存在重复的结果。但是我希望我的汽车清单在
market\u日期进行排序

有没有关于如何解决这个问题的建议? 我尝试了aggregate()和distinct(),但不幸的是,这并没有解决问题(或者我做错了什么)

我尝试使用
distinct()

  • driver.car\u set.order\u by('model\u market\u date')。distinct()
    导致重复
  • driver.car\u set.order\u by('model\u market\u date')。distinct('model\u market\u date')
    导致重复
  • driver.car\u set.order\u by('model\u market\u date')。distinct('pk')
    产生
    Exception值:在表达式上选择distinct必须通过表达式匹配初始订单

    • 我不知道您为什么会收到重复的结果,因为我看不到您的代码中有任何不自然的地方。 如果您只想接收车辆id列表(无重复项),您可以通过以下方式更改for cycle:

      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]
      

      我已经删除了这个答案,编辑了你的问题,并添加了你已经尝试过的
      distinct()
      ,谢谢@madzohan,完成了。这里有评论
      #只用于测试
      OK,通过使用
      set()
      ,例如通过
      上下文['cars']=set(cars)
      删除重复项是有效的+1作为解决方法,但仍不明白为什么
      driver.car\u set.order\u by('model\u market\u date')。distinct()
      仍会产生重复的结果@萨克斯,问题可能隐藏在数据库里,你查过了吗?检查里面的副本。