我有一個友情模型,其中有兩個相關的用戶對象與它關聯。我想編寫一個方法,接受用戶並返回該用戶的朋友列表。我這樣做是通過:幫助將此查詢翻譯爲Django ORM
friends = Friendship.objects.filter(Q(user1=user) | Q(user2=user))
friends_list = [f.user1 if user == f.user2 else f.user2 for f in friends]
但這會引起查詢集中返回的每個用戶(例如數百個查詢)的查詢。我可以通過以下方式編寫它:
friends = Friendship.objects.select_related().filter(Q(user1=user) | Q(user2=user))
friends_list = [f.user1 if user == f.user2 else f.user2 for f in friends]
但是這會在用戶表上進行INNER JOIN。我也可以通過自定義SQL編寫它,但我認爲必須有一種方法可以在ORM內部完成所有這些額外的查找操作。我試圖用id__in
做一些事情,但是我找不到將用戶ID從朋友查詢集中移出的方法。
這就是raw()所做的,所以你不會被迫在ORM中做複雜的數據操作 – verisimilidude