¿Hay alguna manera de hacer una consulta y excluir una lista de cosas, en lugar de llamar excluir varias veces?Objeto múltiple Django excluir()
Respuesta
Sobre la base de su respuesta a Ned, se Parece que solo quiere excluir una lista de etiquetas. Por lo que sólo podría utilizar el filtro in
:
names_to_exclude = [o.name for o in objects_to_exclude]
Foo.objects.exclude(name__in=names_to_exclude)
hace eso lo que quiere?
¿Qué pasa con la exclusión de llamadas múltiples veces? Las consultas son flojas, no pasa nada hasta que intenta extraer datos de ella, por lo que no hay inconveniente en usar .exclude() más de una vez.
Tengo un modelo que tiene una etiqueta de campo manytomany. el usuario puede tener una gran cantidad de etiquetas de ignorar. Quiero excluir dinámicamente los objetos que el usuario no quiere ver. No sabré cuántas veces llamar a exclude hasta el tiempo de ejecución. – Johnd
¿Puedes explicar lo que quieres decir con "las consultas son flojas" y "extraer datos de ellas"? Thnx – akki
Lo que significa perezoso es que no se extraerán datos de la base de datos hasta que realmente se use la consulta. –
Puede hacerlo con bastante facilidad con la Q object:
from django.db.models import Q
excludes = None
for tag in ignored_tags:
q = Q(tag=tag)
excludes = (excludes and (excludes | q)) or q # makes sure excludes is set properly
set_minus_excluded = Foo.objects.exclude(excludes)
También debe ser capaz de hacerlo de forma dinámica con excluir():
qs = Foo.objects.all()
for tag in ignored_tags:
qs = qs.exclude(tag=tag)
Para mejorar la respuesta de Daniel Roseman Creo que sería mejor para obtener los valores que necesita directamente desde el conjunto de consultas en lugar del bucle for que podrían ser caros en grandes conjuntos de datos, es decir,
names_to_exclude = objects_to_exclude.values_list('name')
Foo.objects.exclude(name__in=names_to_exclude)
Usted puede tratar esto también.
exclude_list = ['A', 'B', 'C'] qs = Foo.objects.exclude(items__in=exclude_list)
- 1. Django forma múltiple opción
- 2. Django widget de selección múltiple?
- 3. Combinar/Cadena Objeto jQuery múltiple
- 4. Django Campo de selección múltiple/Casilla de verificación Seleccionar múltiple
- 5. Django como una caja de selección múltiple
- 6. Django ¿eliminar objeto extraño?
- 7. Django actualización objeto
- 8. Excluir un objeto durante la serialización con XmlSerializer
- 9. Django serializador para un objeto
- 10. Objeto django get/set campo
- 11. Soporte de base de datos múltiple en django
- 12. cambio de objeto múltiple en una sola línea
- 13. ¿Cómo excluir resultados con get_object_or_404?
- 14. Inserción múltiple múltiple de SQL
- 15. objeto no tiene ningún atributo 'guardar' Django
- 16. objeto django 'str' no se puede llamar
- 17. Adición de permisos por objeto django administrador
- 18. Django-apio: Pasando solicitud Objeto al trabajador
- 19. Django "view no devolvió un objeto HttpResponse".
- 20. Tipo de objeto de plantilla Django
- 21. formset Django - cómo actualizar un objeto?
- 22. El objeto 'RelatedManager' no es iterable Django
- 23. Django eliminando objeto de la relación ManyToMany
- 24. permisos de nivel de objeto django
- 25. django: select_related() en un objeto ya existente?
- 26. ExcludeFromCodeCoverage Excluir código autogenerado
- 27. Jquery ¿Excluir un selector?
- 28. MySQL unirse y excluir?
- 29. Buscar bash, excluir padre?
- 30. coverage.py: excluir archivos
Lo hago con una lista de objects_to_exclude directamente, no utilizo el o.name: ignore_tags = request.user.ignore_tags.all() case_list = Case.objects.exclude (tags__in = ignore_tags)) – Johnd