Consulta de base de datos a través de django ManyToManyField
-
10-07-2019 - |
Pregunta
Me gustaría encontrar cómo seleccionar todos los objetos cuyo campo ManyToMany contiene otro objeto. Tengo los siguientes modelos (despojados)
class Category(models.Model):
pass
class Picture(models.Model):
categories = models.ManyToManyField(Category)
visible = models.BooleanField()
Necesito una función para seleccionar todas las imágenes en una o más categorías:
def pics_in_cats(cat_ids=()):
pass
PERO necesita devolver un QuerySet si es posible para que pueda hacer algo como:
pics_in_cats((1,2,3)).filter(visible=True)
Podría hacerse cargando todos los objetos de categoría relevantes y fusionando sus atributos de conjunto de imágenes, pero eso parece ineficiente. También me gustaría evitar recurrir a SQL sin formato si es posible.
Gracias de antemano
Solución
¿Por qué escribir una función personalizada y no usar algo como esto? (no probado)
pics = Picture.objects.filter(categories__in = [1,2,3]).filter(visible=True)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow