Я хочу отфильтровать набор запросов Django по одному и тому же полю несколько раз, используя Q
, чтобы включить / исключить записи с определенным значением в этом поле.
Я буду использовать пример модели, чтобы проиллюстрировать мой случай. Скажем, у меня есть модель Record
с полем status
. Это поле может быть одним из трех состояний A
, B
, C
.
class Record(models.Model):
STATUS_A = 'A'
STATUS_B = 'B'
STATUS_C = 'C'
SOME_STATUSES = (
(STATUS_A, 'Something A'),
(STATUS_B, 'Something B'),
(STATUS_C, 'Something C'),
)
status = models.CharField(
max_length=1,
choices= SOME_STATUSES,
default= STATUS_A,
)
У меня есть DRF ViewSet
, который отвечает за возвращение отфильтрованного набора запросов Record
объектов.
Прямо сейчас я фильтрую запрос, заданный одним состоянием, поэтому мой URL
выглядит примерно так:
.../?status=A
.../?status=B
.../?status=C
Но скажем, я хочу отфильтровать набор запросов по нескольким статусам:
Вернуть все записи со статусами A
и B
.
Или вместо этого я хочу вернуть все записи, кроме тех, которые имеют статус C
. Я не уверен, как создать URL в этих случаях. Я знаю, что дублирование параметров в URL - очень плохая практика:
.../?status=A&status=B
Как сделать один запрос A
AND
B
или NOT
C
?
Остальная часть вопроса о том, как обрабатывать эти множественные значения, неясна, вероятно, потому, что я не понимаю, как построить такой запрос.