variable template linebreaksbr length ifequal django negation

template - Negación de consulta Django



length django template (3)

Aquí está la referencia de la API QuerySet . exclude parece hacer lo que quieras.

Sé cómo crear filtros y objetos Q en django, pero no sé cómo negar los operadores que proporciona la API, por ejemplo, para el operador de contenidos, me gustaría algo como no contiene.

p.ej

q=Q(name__notcontains="SomeString")

Esto me conseguiría todos los objetos cuyo nombre no contenga "SomeString".

¿Hay alguna sintaxis que me falta?

Gracias.


Puedes usar exclude() en lugar de filter() :

Entry.objects.exclude(name__contains="SomeString")

("dame todas las entradas EXCEPTO aquellas con names contengan" SomeString ")

Y cuando se trata de un objeto Q, puede usar el símbolo "~" antes del objeto Q para representar la negación. Por ejemplo, la siguiente declaración significa "dame todas las entradas con names contengan" Elephant ", pero NO que contengan" SomeString ":

Entry.objects.filter(Q(name__contains="Elephant") & ~Q(name__contains="SomeString"))

En algunos casos es posible que desee utilizar ambos métodos:

Entry.objects.exclude(Q(name__contains="Elephant") & ~Q(name__contains="SomeString"))

("dame todas las entradas, EXCEPTO aquellas con names contengan" Elefante ", pero que NO contengan" SomeString ")


Utilice exclude como Hank sugiere o, para el caso particular, use Q (name__regex = r ''! (SomeString)'') si realmente necesita usar el filter . Tenga en cuenta que la regex no es regex base de datos, verifique qué sintaxis admite primero su db.