python - 在 Django 查询中使用 max()
问题描述
有没有办法让这个查询与 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'
解决方案
数据库中的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]不返回 a ,但是QuerySet
:
(...) 并返回匹配的行数(如果某些行已经具有新值,则可能不等于更新的行数)。
推荐阅读
- javascript - 如何在按钮单击时更改地图元素的高度?
- xcode - Xcode 不断给出未找到架构 arm64 的符号
- javascript - 如何获取字符的 Unicode 属性?
- algorithm - 如何确定桶排序的平均和最坏情况空间复杂度
- javascript - 如何使 XMLHTTPRequest 在 Internet Explorer 11 上正常工作
- c# - 如何在自己的索引上从 .NET Core Web API 登录到 Elasticsearch
- javascript - 打字稿:函数参数中的联合导致错误
- json - 如何修复 SyntaxError: Unexpected token < in JSON at position 2 in woocoomerce checkout page
- github - 为什么github账号登不上?
- php - php array_merge 未合并并显示为空