Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Django Queryset across Models?

I have several Models and want to return a queryset of all the Models belonging to a User, I'm wondering if its possible to return one Queryset from multiple Models?

like image 256
Rasiel Avatar asked Dec 10 '08 20:12

Rasiel


2 Answers

I am assuming that you mean you would like to return a single queryset of all the objects belonging to the user from each model.

Do you need a queryset or just an iterable? AFAIK, heterogeneous qs's are not possible. However, you could easily return a list, a chained iterator (itertools) or a generator to do what you want. This assumes that the models referencing the user are known ahead of time. Assuming default related_name, related queryset attributes could be accessed from user instance via the model's name:

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

Of course, using any heterogeneous list you would either only be able to use fields or methods that are defined across all such models, or you would have to determine the type of each object to do any type specific actions.

like image 111
Wayne Werner Avatar answered Oct 05 '22 02:10

Wayne Werner


Your models must contain relationship fields (ForeigKey and ManyToManyField), with related_name keyword argument set. Check documentation here.

like image 43
Evgeny Lazin Avatar answered Oct 05 '22 03:10

Evgeny Lazin