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

¿Fue útil?

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
scroll top