Для сортировки QuerySet по значению ForeignKey в Django можно использовать атрибут order_by()
вместе с именем связанного поля.
Возьмем в качестве примера две модели - Post
и Category
:
class Category(models.Model): name = models.CharField(max_length=255) def __str__(self): return self.name class Post(models.Model): title = models.CharField(max_length=255) category = models.ForeignKey(Category, on_delete=models.CASCADE) def __str__(self): return self.title
Допустим, у нас есть несколько записей типа Post
и мы хотим отсортировать их по значению category
. Для этого мы можем использовать метод order_by()
в сочетании с именем поля связанной модели:
sorted_posts = Post.objects.order_by('category__name')
Здесь мы указываем имя связанного поля category
с помощью двойного подчеркивания (__
) и затем имя поля, по которому хотим выполнить сортировку (name
). Таким образом, результаты будут отсортированы по значению поля name
в связанной модели Category
.
Если вам нужно отсортировать записи в обратном порядке, вы можете добавить -
перед имени поля:
sorted_posts = Post.objects.order_by('-category__name')
Теперь результаты будут отсортированы в обратном порядке по значению поля name
в связанной модели Category
.
Помимо этого, вы можете сортировать QuerySet по нескольким полям. Например, чтобы сначала сортировать по category
, а затем по другому полю date_created
, вы можете использовать следующий код:
sorted_posts = Post.objects.order_by('category__name', 'date_created')
Это отсортирует записи сначала по значению name
в связанной модели Category
, а затем по значению поля date_created
.