2008-12-10 32 views
8

Tengo varios modelos y quiero devolver un conjunto de consulta de todos los modelos que pertenecen a un usuario. Me pregunto si es posible devolver un Queryset de varios modelos.Django Queryset en todos los modelos?

+0

Duplicado: http://stackoverflow.com/questions/313137/using-django-how-can-i-combine-two-queries-from-separate-models-into-one-query –

Respuesta

8

Supongo que quiere decir que desea devolver un solo conjunto de consulta de todos los objetos que pertenecen al usuario de cada modelo.

¿Necesita un conjunto de preguntas o simplemente un iterable? AFAIK, los qs heterogéneos no son posibles. Sin embargo, puede devolver fácilmente una lista, un iterador encadenado (itertools) o un generador para hacer lo que desee. Esto supone que los modelos que hacen referencia al usuario se conocen con anticipación. Suponiendo related_name defecto los atributos de QuerySet relacionados podrían ser accedidos desde instancia de usuario mediante el nombre del modelo:

qs = getattr(user, '%s_set' % model_name.lower()); 

Por supuesto, el uso de cualquier lista heterogénea que le sea sólo será capaz de utilizar campos o métodos que se definen a través de todos estos modelos , o tendría que determinar el tipo de cada objeto para hacer cualquier tipo de acciones específicas.

3

Sus modelos deben contener campos de relación (ForeigKey y ManyToManyField), con el conjunto de argumentos de palabra clave related_name. Consulte la documentación here.

Cuestiones relacionadas