Как использовать order_by и annotate в Django для получения продуктов на основе порядка сезона?

Предположим, что у меня есть модель Product. Я использую Django-taggit, чтобы иметь возможность добавлять теги для каждого продукта. В каждом продукте я добавляю такие теги, как зима, лето, осень, весна. Затем я создаю функции типа this_month(), используя timezone.now для определения времени в Django. Функция this_month() будет возвращать целое число, например 8 для августа, так как я буду использовать .strftime(). Теперь я создам функцию this_season(this_month), которая принимает только целое число; эта функция вернет строку, например, 'winter'.

Итак, чтобы подвести итог, я могу вызвать this_season(this_month), чтобы получить правильный сезон, например, если now = timezone.now, this_month = now.strftime('%m'), и season = this_season(this_month) - если this_month целое число 8 - то this_season() вернет 'summer'.

Вопрос в том, как мне запросить базу данных с помощью annotate, чтобы создать псевдо-столбец, который позволит мне получить продукты, упорядоченные по тегам (используя теги Django-taggit) на основе сезона? Таким образом, результаты будут возвращаться с продуктами, которые в правильном сезоне в порядке убывания - то есть продукт сезона Лето в августе будет отображаться в верхней части списка.

Есть подсказка?

Вернуться на верх