2016-08-26 59 views
1

我在這裏迷路了。我需要生成一個查詢集(qs),該查詢集由另一個qs的外鍵指向的值組成(在此處查找,在此過程中變得光禿禿......)。從ForeignKey值生成一個查詢集

現在,讓我們說我有簡單的模型:

class User(models.Model): 
    name = models.CharField() 

class Comment(models.Model): 
    user = models.ForeignKey(User, related_field="comments") 

    def __str__(self): 
     return "%s's comment"%self.user.name 

我已經是一個QS組成(很多),專門選擇評論。你說:

[<Comment: "user_A's comment">,<Comment: "user_B's comment">,...]

,我需要生成一個QS用戶組成,由我以前QS的外鍵指向的值。現在,我不能只是用values('user')獲取一個列表,因爲由此產生的QS已在分貝執行進一步的操作,如與其他用戶QS,過濾等

我也嘗試過加盟通過使用.raw()並取得了一些成功來強制執行該進程,但後來我得到了一個rawQuerySet對象,至此我無法使用它。

看着有關extra()select_related()東西的文檔,我想可能有某種方法,但我無法弄清楚。

回答

0

嘗試過東西后,我找到了一種方法來完成我想要的。雖然該方法可能效率低下,因爲必須多次命中該命令,結果採用正確的格式(一個查詢集)。對於那些誰遇到同樣的問題,這裏的生成用戶從foreignkeys指出值的queryset的方式,給定的,說一個查詢集,評論

some_users_queryset = User.objects.filter(comments__pk__in=some_comments_queryset) 
some_users_queryset = some_users_queryset.distinct() 

正如我所說的,我不認爲這種方式是最有效的,但我想限制我在使用Django時使用純SQL。

當然,我很樂意聽到更好,更快的方法來達到相同的結果。