Objeto F
La consulta anterior solía comparar las propiedades de un objeto con un valor constante ¿Cómo se comparan las dos propiedades? Respuesta: El uso de objetos F se define en django.db.models.
La sintaxis es la siguiente:
F(属性名)
-
Ejemplo: consultar libros con un volumen de lectura mayor o igual que el volumen de revisión.
from django.db.models import F BookInfo.objects.filter(readcount__gt=F('commentcount')) <QuerySet [<BookInfo: 雪山飞狐>]>
Puede usar operaciones aritméticas en objetos F.
-
Ejemplo: consultar libros con un volumen de lectura superior a 2 veces el número de reseñas.
BookInfo.objects.filter(readcount__gt=F('commentcount')*2) <QuerySet [<BookInfo: 雪山飞狐>]>
Objeto Q
Se llaman varios filtros uno por uno para indicar lógica y relación, y la palabra clave y en la parte where de la instrucción SQL.
-
Ejemplo: consultar libros con un volumen de lectura superior a 20 y un número inferior a 3.
BookInfo.objects.filter(readcount__gt=20,id__lt=3) <QuerySet [<BookInfo: 天龙八部>]>
O
BookInfo.objects.filter(readcount__gt=20).filter(id__lt=3) <QuerySet [<BookInfo: 天龙八部>]>
Si necesita implementar una lógica o una consulta, debe usar el objeto Q () combinado con el operador |, y el objeto Q se define en django.db.models.
La sintaxis es la siguiente:
Q(属性名__运算符=值)
-
Ejemplo: Consulta libros con un volumen de lectura mayor que 20 y reescríbelos como objetos Q de la siguiente manera.
BookInfo.objects.filter(Q(readcount__gt=20))
Los objetos Q se pueden conectar con &, |, & representa AND lógico, y | representa OR lógico.
-
Ejemplo: la consulta de libros con un volumen de lectura superior a 20 o un número inferior a 3 solo se puede implementar utilizando objetos Q
BookInfo.objects.filter(Q(readcount__gt=20)|Q(id__lt=3)) <QuerySet [<BookInfo: 射雕英雄传>, <BookInfo: 天龙八部>, <BookInfo: 雪山飞狐>]>
Antes del objeto Q, puede usar el operador ~ para indicar no.
-
Ejemplo: Consultar libros con un número no igual a 3.
BookInfo.objects.filter(~Q(id=3)) <QuerySet [<BookInfo: 射雕英雄传>, <BookInfo: 天龙八部>, <BookInfo: 雪山飞狐>]>