11ジャンゴFとQの問合せ

、FおよびQクエリ

from django.db.models import F, Q

二、Fクエリ

上記の例の全てにおいて、我々が構築したフィルタがある一定の比較の私たち自身のセットを持つフィールド値のひとつ我々は二つのフィールドの値を比較したい場合は、どのようにそれを行うには

DjangoはF()は、このような比較を行うために用意されています。実施例F.()は、クエリ・フィールドに同じモデルインスタンス両者の異なるフィールドを比較する値を参照することができます。

# 1.查询出卖出数大于库存数的商品
res = models.BookRecord.objects.filter(maichu__gt=F("kucun")).first()
print(res.book.name)


'''*******************************************注意
F可以帮我们取到表中某个字段对应的值来当作我的筛选条件,而不是我认为自定义常量的条件了,实现了动态比较的效果
Django 支持 F() 对象之间以及 F() 对象和常数之间的加减乘除和取模的操作。基于此可以对表中的数值类型进行数学运算
'''********************************************注意

# 2.将所有的书的价格 全部提高100块
res = models.Book.objects.update(price = F("price")+100)

# 3.了解   尝试着将所有的书的名字后面都加上  爆款
from django.db.models.functions import Concat
res = models.Book.objects.update( name=Concat(F("name"),Value("(爆款)")) )

Concat表示进行字符串的拼接操作,参数位置决定了拼接是在头部拼接还是尾部拼接,Value里面是要新增的拼接值

三、Qクエリ

filter()でコンマ関係によって分離されている他の方法。あなたは、より複雑なクエリ(例えば実行する必要がある場合はORステートメントを)は、使用することができますQ对象に|〜波番号、Qクエリアフリカクエリを。

例:

1.查询 卖出数大于100 或者 价格小于100块的
from django.db.models import Q
models.Product.objects.filter(Q(maichu__gt=100)|Q(price__lt=100))

2.查询 库存数是100 并且 卖出数不是0 的产品
models.Product.objects.filter(Q(kucun=100)&~Q(maichu=0))

3.查询产品名包含新款, 并且库存数大于60的
models.Product.objects.filter(Q(kucun__gt=60), name__contains="新款")

注意:私たちは、&組み合わせとすることができます|演算子と任意の複雑なオブジェクトを作成するために、グループQに括弧を使用しています。

一方、Q〜オブジェクトは、通常と逆クエリ(NOT)クエリの組み合わせを可能にする、無効にすることができます。

# Q查询进阶用法 用Q产生对象 然后再使用
q=Q()

# 这里设置此Q查询用的是or方法,默认是and方法
q.connector="or"
# 这是是Q查询括号内的条件
q.children.append(("name__contains", 'python'))

# filter括号内是Q查询q
res = models.Book.objects.filter(q)
print(res)

おすすめ

転載: www.cnblogs.com/xichenHome/p/11748014.html