有没有一种方法可以使此查询与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'
答案 0 :(得分:3)
在数据库中两个字段之间的max
在Django中是Greatest
[Django-doc],因此查询应读取以下内容:
from django.db.models import F, Value
from django.db.models.functions import Greatest
Task.objects.filter(
id=input_stage.id
).update(
start_date=Greatest(Value(data.get('start_date')), F('start_date')),
finish_date=Greatest(Value(data.get('finish_date')), F('finish_date'))
)
您可能还希望将data.get('start_date')
等转换为date
对象。
请注意,.update(..)
[django-doc]不会 返回QuerySet
,但是:
(...),并返回匹配的行数(如果某些行已经具有新值,则可能不等于更新的行数)。