1

2 つのフィールドのリストからの要素の出現によってクエリセットを並べ替える必要があります。現在、オブジェクトを見つける部分を書きました:

self.filter((reduce(operator.or_, ((Q(tags__contains=tag) | Q(name__contains=string)) for tag in string.split(' ')))))

しかし、正しい順序を取得するための解決策が見つかりません。「タグ」フィールドのリストからの要素の出現による順序付けは、私の問題を部分的に解決します。 しかし、クエリセット内のすべてのオブジェクトを反復処理することは好まない..

4

1 に答える 1

2

それで、特定のタグを持つオブジェクトを作成して上部に表示したいですか?

同様の問題があります。アイデアは、ブール値を保持する新しいフィールドを選択して追加することです。これにより、並べ替えることができます。

このフィールドは、django extraqueryset メソッドを使用して追加する必要があります。

MyModel.objects.extra(
    select={
        'tags_occurance': "(tags LIKE '%tag1%') + (tags LIKE '%tag2%')"
    },
).order_by('-tags_occurance')

このようなものでなければなりません。

于 2014-06-18T12:26:37.267 に答える