Rasiel
Rasiel

Reputation: 2913

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?

Upvotes: 9

Views: 3351

Answers (2)

Wayne Werner
Wayne Werner

Reputation: 1130

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.

Upvotes: 8

Evgeny Lazin
Evgeny Lazin

Reputation: 9413

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

Upvotes: 3

Related Questions