фильтр по дням недели возвращает пустое значение JSON, в то время как он должен возвращать один объект для воскресенья, Django Rest Framework - PullRequest
1 голос
/ 02 августа 2020

Это очень странно, и я не могу найти подходящего решения. У меня есть модель Job, которую я пытаюсь сериализовать. В моем классе набора представлений у меня есть функция, которая фильтрует набор запросов в зависимости от дня недели. Согласно документации, 6-й день недели - воскресенье, поэтому в наборе запросов должно быть одно задание. Однако он возвращает пустой JSON. Это объект, который должен соответствовать этому запросу: ожидаемый результат

   def get_queryset(self):
    day_query = self.request.GET.get('day')
    if day_query != '' and day_query is not None:
        queryset = Job.objects.filter(dt_start__week_day=day_query)
        return queryset
    else:
        today = datetime.today().weekday()
        queryset = Job.objects.filter(dt_start__week_day=today)

        return queryset

и это функция набора представлений: введите здесь описание изображения

Если я жестко запрограммирую int 1 для воскресенья, тогда это сработает, это довольно нервно, я буду очень признателен за некоторое понимание этого!

1 Ответ

1 голос
/ 02 августа 2020

Поиск __week_day [Django -doc] использует значения, отличные от .weekday() [pyton-doc] возврат. Действительно, если мы посмотрим на документацию поиска __week_day, мы увидим:

Принимает целочисленное значение, представляющее день недели от 1 (воскресенье) до 7 (суббота) .

Тогда как .weekday() возвращает:

Возвращает день недели как целое число, где Понедельник - 0 и Воскресенье - 6 .

Итак, нам нужно сначала выполнить сопоставление:

           | mon tue wed thu fri sat sun
.weekday() |   0   1   2   3   4   5   6
__week_day |   2   3   4   5   6   7   1

Мы можем выполнить сопоставление с ((<i>x</i>+1) % 7)+1, где x является результатом .weekday():

def get_queryset(self):
    day_query = self.request.GET.get('day')
    if not day_query:
        today = datetime.today().weekday()
        day_query = <b>(today + 1) % 7 + 1</b>
    return Job.objects.filter(dt_start__week_day=day_query)

Это может быть важно, если вы также указываете параметр day, поскольку он Конечно, зависит от того, как вы интерпретируете значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...