django Q的用法
前言
Q对象是Django对model查询中所使用的关键字参数进行封装后的一个对象。
Q对象可以通过 &(与 即 and)、 |(或 即or )、 ~(非 取反 即 !=)运算来组合生成不同的Q对象
范围查询:
from django.db.models import Q
from login.models import lucax #models对象
lucax.objects.get(
Q(question__startswith='Who'),
Q(pub_date=date(2005, 5, 2)) | Q(pub_date=date(2005, 5, 6))
)
等价于
SELECT * from polls WHERE question LIKE 'Who%'
AND (pub_date = '2005-05-02' OR pub_date = '2005-05-06')
QString::startsWith() -> 判断字符串是否以某个字符串开头,其中第二个参数指定是否大小写敏感,默认为大小写敏感
QString::endsWith() -> 判断字符串是否以某个字符串结尾,与QString::startsWith()类似
QString::contains() -> 判断是否包含某个字符串
复杂查询和条件查询结合 (注意条件查询要放到最后!!)
正确:
Poll.objects.get(
Q(pub_date=date(2005, 5, 2)) | Q(pub_date=date(2005, 5, 6)),
question__startswith='Who')
否定查询 Q前面加~
Q(question__startswith='Who') | ~Q(pub_date__year=2005)
给字段默认+1的写法
只展示关键代码,先引入F函数,再使用F('字段名称')+1:
from django.db.models import F
Reporters.objects.filter(name='vie').update(stories_filed=F('stories_filed') + 1)
https://www.xinzhiweike.com/wenda/1586184475201536