Django-FとQ関数の役割と使用

3048 ワード

F関数
既存のクエリー・オブジェクトへの参照を解析できるオブジェクト.
obj = Score.objects.get(stuid='12')
obj.score += 1
obj.order.save()

実行されたSQL文
update score set score = 60 where stuid = '12'

私たちが生成したいSQL文は
update score set score = score +  1 where stuid = '12'

この場合F関数を使用する必要があります
from django.db.models import F
from core.models import Order
 
obj = Score.objects.get(stuId='12')
obj.score = F('score') + 1
obj.save()
#   sql   :
update score set score = score + 1 where stuid = '12'

DjangoプログラムにF()が表示されると、Djangoは標準のPython操作の代わりにSQL文を使用します.
上記コードにおいて  Score.score  の値は何ですか.Pythonはその値を取得したことがありません.pythonがした唯一のことはDjangoのF()関数でSQL文を作成して実行することです.
上記の方法でデータを更新した後、データベースの値がプログラムの値に対応するようにデータを再ロードする必要があることに注意してください.
  score_obj= Score.objects.get(StuId=keyword) 

あるいは、より簡単な方法を使用します.
Score.refresh_from_db()

 
Q関数
役割:オブジェクトを複雑にクエリーし、&(and)、|(or)、~(not)オペレータをサポートします.
基本的な使用方法:
from django.db.models import Q
score_obj=Score.objects.filter(Q(StuId=keyword)|Q(StuId=keyword))

クエリがキーワードクエリを使用している場合、Qオブジェクトは必ず前面に表示されます.
Student.objects.get(
Q(StuDate=date(2008, 5, 12)) | Q(StuDate=date(2018, 5, 6)),
StuName__startswith='Who')