Джанго Queryset через модели?

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

10.12.2008 20:07:42
S.Lott 10.12.2008 21:32:08
2 ОТВЕТА
РЕШЕНИЕ

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

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

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

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

8
11.12.2008 23:03:17

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

3
10.12.2008 20:55:03