django orders_by меняет направление - PullRequest
0 голосов
/ 28 января 2019

Я отредактировал свой предыдущий пост, поэтому, возможно, его легче понять:

У меня есть следующие модели

class Course(models.Model):
 name = models.Charfield(max_length=255)

class CourseDay(models.Model):
 course = models.ForeignKey(Course)
 date = models.DateField()

Для моего просмотра я фильтрую все объекты следующим образом:

courses = Course.objects.filter(models.Q(courseday__date__gt=date_filter) |
                                models.Q(courseday__isnull=True))

Это дает мне все подходящие курсы для данного фильтра.Это может включать в себя один курс несколько раз для каждого соответствующего дня курса.Результат для курса с 2 днями и один с одним днем ​​может выглядеть так:

<QuerySet [<Course: 5 test>, <Course: 9 Latex>, <Course: 5 test>]> 

Чтобы получить дубликаты, я использую следующий фильтр:

courses = Course.objects.filter(models.Q(courseday__date__gt=date_filter) |
                                models.Q(courseday__isnull=True)).distinct()

Я получаюмой набор запросов курсов без дубликатов.Теперь я хочу упорядочить этот набор запросов по дате связанных курсовых дней.

У меня есть два варианта.Первый:

courses.order_by("courseday__date")

Второй - отредактировать класс Course и добавить Meta-класс.

class CourseDay(...):
 ...
 class Meta:
  ordering= ["courseday__date"]

Оба варианта сортируют массив, как я и хотел, но еслиЯ записываю в журнал свой Query Set, и я становлюсь таким:

<QuerySet [<Course: 5 test>, <Course: 9 Latex>, <Course: 5 test>]> 

Теперь, если я использовал отдельный или использую его в этом Query Set, он не будет фильтровать дубликаты всегда.Я знаю, что могу, например, сначала отсортировать QS и вручную отфильтровать все дубликаты, но мне это не кажется правильным.

1 Ответ

0 голосов
/ 29 января 2019

Я до сих пор не понимаю, почему это не работает.Поскольку я должен продолжить свою работу, я выбрал следующее решение:

Чтобы удалить дубликаты, я буду использовать различные без только сортировки набора запросов.Для сортировки QuerySet я преобразовал его в список и просто использовал для сортировки функции следующим образом:

date_filter = date.today() - relativedelta(months=3)
courses = Course.objects.filter(models.Q(courseday__date__gt=date_filter) |
                                models.Q(courseday__isnull=True)).distinct()
courses = list(courses)
courses.sort(key=lambda x: (x.get_first_date() is None, x.custom_id), reverse=True)

Он отлично работает и делает то, что должен, но все же я не понимаю, почему сочетание различных иorded_by со связанными полями не будет работать.Приветствия

...