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

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

8 голосов
/ 10 декабря 2008

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

Ответы [ 2 ]

8 голосов
/ 12 декабря 2008

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

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

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

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

3 голосов
/ 10 декабря 2008

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

...