Django基于多对多字段的第一个对象进行排序
Posted
技术标签:
【中文标题】Django基于多对多字段的第一个对象进行排序【英文标题】:Django sorting based on first object of many to many field 【发布时间】:2019-04-10 15:39:03 【问题描述】:在这里,我想根据汽车字段的第一个对象对用户进行排序。对于外键,我正在这样做,这就是我尝试过的。 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)
【问题讨论】:
那么第一个或最后一个对象是什么?在数据库中,项目是无序的,因此没有第一个/最后一个相关对象之类的东西。 【参考方案1】:您可以将注解与子查询一起使用来实现您想要的,如下:
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
【讨论】:
以上是关于Django基于多对多字段的第一个对象进行排序的主要内容,如果未能解决你的问题,请参考以下文章
Django Unhashable Type List 即使我传入一个对象?(多对多字段)