Django consulta avanzada FQ consulta

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: 雪山飞狐>]>
    
125 artículos originales publicados · Me gusta 260 · Visitas 120,000+

Supongo que te gusta

Origin blog.csdn.net/weixin_44685869/article/details/105399870
Recomendado
Clasificación