Использование max () с запросом Django - PullRequest
0 голосов
/ 19 сентября 2018

Есть ли способ заставить этот запрос работать с Django?

stage = Task.objects.filter(id = input_stage.id)\
            .update(start_date = max(data.get('start_date'), F('start_date')),
                    finish_date = max(data.get('finish_date'), F('finish_date')))

Теперь я получаю сообщение об ошибке:

TypeError: '>' not supported between instances of 'F' and 'datetime.date'

1 Ответ

0 голосов
/ 19 сентября 2018

* * * * max между двумя полями в базе данных в Django Greatest [Django-doc] , поэтому запрос должен выглядеть примерно так:

from django.db.models import F, Value
from django.db.models.functions import <b>Greatest</b>

Task.objects.filter(
    id=input_stage.id
).update(
    start_date=<b>Greatest</b>(Value(data.get('start_date')), F('start_date')),
    finish_date=<b>Greatest</b>(Value(data.get('finish_date')), F('finish_date'))
)

Вы также можете преобразовать data.get('start_date') и т. Д. В date объекты.

Имейте в виду, что .update(..) [django-doc] не не возвращает QuerySet, но:

(...) и возвращает количество совпадений строк (что может небыть равным количеству обновленных строк, если некоторые строки уже имеют новое значение).

...