基于多对多字段的第一个对象的Django排序

Django sorting based on first object of many to many field

这里我想根据汽车字段的第一个对象对用户进行排序。对于外键,我是这样做的,这就是我尝试过的。 User.objects.all().order_by('car__name')。 但是对于多对多领域,我该如何处理第一个或最后一个对象。

class Car(models.Model):
  name = models.CharField(max_length=40)

class User(models.Model):
   name = models.CharField(max_length=40)
   car = models.ManyToManyField(Car)

你可以使用注解结合子查询来实现你想要的,如下:

cars = Car.objects.filter(user=OuterRef('pk')).order_by('some_ordering')
user = User.objects.annotate(first_car_name=Subquery(cars.values('name')[1])).order_by('first_car_name')

可以在此处找到更多信息:https://docs.djangoproject.com/en/2.1/ref/models/expressions/#subquery-expressions