Fオブジェクト
前のクエリは、オブジェクトのプロパティを定数値と比較するために使用されました。2つのプロパティをどのように比較しますか?回答:Fオブジェクトの使用はdjango.db.modelsで定義されています。
構文は次のとおりです。
F(属性名)
-
例:読書量がレビュー量以上の本をクエリします。
from django.db.models import F BookInfo.objects.filter(readcount__gt=F('commentcount')) <QuerySet [<BookInfo: 雪山飞狐>]>
Fオブジェクトに対して算術演算を使用できます。
-
例:レビュー数の2倍を超える読書量の本をクエリします。
BookInfo.objects.filter(readcount__gt=F('commentcount')*2) <QuerySet [<BookInfo: 雪山飞狐>]>
Qオブジェクト
複数のフィルターが1つずつ呼び出され、ロジックと関係、およびSQLステートメントのwhere部分のandキーワードが示されます。
-
例:読書量が20を超え、数値が3未満の書籍をクエリします。
BookInfo.objects.filter(readcount__gt=20,id__lt=3) <QuerySet [<BookInfo: 天龙八部>]>
または
BookInfo.objects.filter(readcount__gt=20).filter(id__lt=3) <QuerySet [<BookInfo: 天龙八部>]>
論理ORクエリを実装する必要がある場合は、Q()オブジェクトを|演算子と組み合わせて使用する必要があり、Qオブジェクトはdjango.db.modelsで定義されています。
構文は次のとおりです。
Q(属性名__运算符=值)
-
例:読書量が20を超える本をクエリし、次のようにQオブジェクトとして書き換えます。
BookInfo.objects.filter(Q(readcount__gt=20))
Qオブジェクトは&、|、&で接続でき、論理ANDを表し、|は論理ORを表します。
-
例:読書量が20以上または3未満の本のクエリは、Qオブジェクトを使用してのみ実装できます
BookInfo.objects.filter(Q(readcount__gt=20)|Q(id__lt=3)) <QuerySet [<BookInfo: 射雕英雄传>, <BookInfo: 天龙八部>, <BookInfo: 雪山飞狐>]>
Qオブジェクトの前に、〜演算子を使用して、NOTでないことを示すことができます。
-
例:数値が3でない本をクエリします。
BookInfo.objects.filter(~Q(id=3)) <QuerySet [<BookInfo: 射雕英雄传>, <BookInfo: 天龙八部>, <BookInfo: 雪山飞狐>]>