基于多对多字段的第一个对象的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
这里我想根据汽车字段的第一个对象对用户进行排序。对于外键,我是这样做的,这就是我尝试过的。 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