Django Queryset verwandter Objekte nach Vorfilterung des ursprünglichen Modells

8

Mit einem gegebenen Anfragesatz für ein Modell möchte ich einen Abfragesatz eines anderen Modells erhalten, das durch einen Fremdschlüssel verknüpft ist. Nehmen Sie das Weblog-Schema des Django-Projektdokuments:

%Vor%

Angenommen, ich habe ein author -Objekt und möchte jedes Blog, für das der Autor geschrieben hat, als Abfragegruppe abrufen. Ich mache etwas wie author_blogs = [entry.blog for entry in author.entry_set] . Aber ich habe in diesem Fall eine Liste, keine Anfrage. Gibt es eine Möglichkeit, dies direkt mit ORM-Abfragen zu tun, so kann ich es über einen benutzerdefinierten Eintrags-Manager mit use_for_related_fields = True einrichten und etwas wie author_blogs = author.entry_set.blogs machen und die Vorteile der verzögerten Auswertung usw. eines Abfrage-Sets nutzen ?

Bearbeitetes Szenario und Lösung

So wurde mir klar, dass die Anwendung meiner Frage etwas anders ist als die, wie ich sie oben gestellt habe, wofür Daniel Rosemans Situation sehr viel Sinn macht. Meine Situation ist wirklich mehr wie author.entry_set.manager_method().blogs , wobei manager_method() ein Abfrage-Set von Entry-Objekten zurückgibt. Ich habe seine Antwort akzeptiert, weil sie die Lösung inspiriert hat, die ich gefunden habe:

%Vor%

Das Schöne ist, dass es nur eine DB-Abfrage verwendet. Es ist ein bisschen schwierig und ausführlich, also denke ich, dass es am besten ist, blogs() als eine Objektmethode von Author zu definieren, die das obige zurückgibt.

    
acjay 26.02.2013, 14:28
quelle

1 Antwort

17

Der Trick dabei ist, sich daran zu erinnern, dass Sie mit dem Blog-Modell beginnen sollten, wenn Sie eine Abfrage von Blogs wünschen. Dann können Sie die Syntax mit doppeltem Unterstrich verwenden, um den Beziehungen zu folgen. Also:

%Vor%     
Daniel Roseman 26.02.2013, 14:32
quelle

Tags und Links