Django объединяет QuerySet с сохранением порядка
Я пытаюсь объединить 2 набора запросов. Сейчас я использую оператор |
, но такой способ не будет работать как "append".
Мой текущий код таков:
df = RegForm((querysetA.all() | querysetB.all()).distinct())
Мне нужно, чтобы элементы из querysetA находились перед querysetB. Можно ли этого добиться, оставляя их просто запросами?
Это можно решить, используя annotate
для добавления пользовательского поля для упорядочивания на querysets, и использовать это в union
вот так:
a = querysetA.annotate(custom_order=Value(1))
b = querysetB.annotate(custom_order=Value(2))
a.union(b).order_by('custom_order')
Прежде чем django-3.2, вам необходимо указать output_field
для Value
:
from django.db.models import IntegerField
a = querysetA.annotate(custom_order=Value(1, IntegerField()))
b = querysetB.annotate(custom_order=Value(2, IntegerField()))