2008-12-10 17 views
8

Mam kilka modeli i chcę zwrócić zestaw zapytań wszystkich modeli należących do użytkownika, zastanawiam się, czy możliwe jest zwrócenie jednego kwerendy z wielu modeli?Django kwerendy na modele?

+0

Duplikat: http://stackoverflow.com/questions/313137/using-django-how-can-i-combine-two-queries-from-separate-models-into-one-query –

Odpowiedz

8

Zakładam, że masz na myśli, że chcesz zwrócić pojedynczy zestaw zapytań wszystkich obiektów należących do użytkownika z każdego modelu.

Potrzebujesz zestawu zapytań, czy tylko numeru iteracyjnego? AFAIK, heterogeniczne qs nie są możliwe. Możesz jednak łatwo zwrócić listę, łańcuchowy iterator (itertools) lub generator, aby zrobić to, co chcesz. Zakłada się, że modele odnoszące się do użytkownika są znane z wyprzedzeniem. Zakładając domyślny related_name, związane atrybuty queryset mogłyby być dostępne z instancji użytkownika poprzez nazwę modelu:

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

Oczywiście, przy użyciu dowolnego heterogenicznego lista będzie trzeba albo być tylko w stanie używać pól lub metod, które są zdefiniowane we wszystkich takich modeli , lub musiałbyś określić typ każdego obiektu, aby wykonać określone działania.

3

Twoje modele muszą zawierać pola relacji (ForeigKey i ManyToManyField) z ustawionym argumentem related_name. Sprawdź dokumentację here.

Powiązane problemy