2008-12-10 5 views
8

У меня есть несколько моделей и вы хотите вернуть набор запросов для всех моделей, принадлежащих пользователю, мне интересно, можно ли вернуть один Queryset из нескольких моделей?Django Queryset через модели?

+0

Duplicate: http://stackoverflow.com/questions/313137/using-django-how-can-i-combine-two-queries-from-separate-models-into-one-query – 2008-12-10 21:32:08

ответ

8

Я предполагаю, что вы имеете в виду, что хотите вернуть один набор запросов всех объектов, принадлежащих пользователю, из каждой модели.

Вам нужен запрос или просто итерабельный? AFAIK, гетерогенные qs не возможны. Однако вы можете легко вернуть список, цепочный итератор (itertools) или генератор, чтобы делать то, что вы хотите. Это предполагает, что модели, ссылающиеся на пользователя, известны заранее. Предполагая, что по умолчанию related_name, связанные атрибуты QuerySet могут быть доступны из экземпляра пользователя по имени модели:

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

Конечно, используя любой гетерогенный список вы должны либо быть в состоянии использовать поля и методы, которые определены во всех таких моделях , или вам нужно будет определить тип каждого объекта для выполнения каких-либо действий определенного типа.

3

Ваши модели должны содержать поля отношений (ForeigKey и ManyToManyField) с набором аргументов related_name. Проверьте документацию here.

Смежные вопросы