Сортировка Django по первому объекту поля «многие ко многим» - PullRequest
0 голосов
/ 07 ноября 2018

Здесь я хотел отсортировать пользователя по первому объекту автомобильного поля. И для внешнего ключа я делал так, и это то, что я пытался. 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 Ответ

0 голосов
/ 07 ноября 2018

Вы можете использовать аннотацию вместе с подзапросами для достижения желаемого, как показано ниже:

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

...