2017-08-29 13 views
1

に注釈を付ける後の値のリストを取得する私はこのようなDjangoのコードを持っている:Djangoのクエリセット

max_id_qs = qs1.values('parent__id').\ 
         annotate(max_id = Max('id'),).\ 
       values_list('max_id', flat = True) 

問題は、私はこのようなフィルタでmax_id_qsを使用する場合:

rs = qs2.filter(id__in = max_id_qs) 

クエリは、以下の構造のMySQLクエリに変換されます。

select ... from ... where ... and id in (select max(id) from ...) 

tは言い換えれば

select ... from ... where ... and id in [2342, 233, 663, ...] 

が、私は劇的に検索を遅くMySQLのクエリでサブクエリの代わりに、整数のリストを取得する必要があります。私が驚いたのは、Djangoのvalues_listが値のリストを返すと思ったことです。

だから私は代わりにid in (select ... from...)サブクエリ

+0

可能な重複https://stackoverflow.com/questions/4424435/how-to-convert-a-django-queryset-to-a-list:そ​​れは単にリストに変換し評価するために、 –

答えて

1

クエリセットの整数で希望MySQLのクエリを達成するためにコードを書き換えるべきか疑問が、怠惰で、.values_listはまだクエリセットオブジェクトを返します。

rs = qs2.filter(id__in=list(max_id_qs))