0
私は、タイトルまたは説明の用語の投稿を検索する検索フィールドを作成し、一致するすべての投稿のリストを返します。Djangoでどのフィールドの照合結果を並べ替えるには?
def search(request):
term = request.GET.get('q')
posts = models.Post.objects.filter(
Q(title__icontains=term) | Q(description__icontains=term)
)
return render(request, 'posts/post_list.html', {'posts': posts})
これは動作しますが、私は、検索語を含むタイトルと記事はタイトルは検索用語が含まれていませんが、説明がないところそれらに続いて、最初に表示されるように結果を注文したいと思います。
私はそうのようにそれらをINGの2つのクエリとunion
を作成してみました:
good_matches = models.Post.objects.filter(
Q(title__icontains=term))
just_ok_matches = models.Post.objects.filter(
~Q(title__icontains=term) & Q(description__icontains=term)
)
posts = good_matches | just_ok_matches
しかし、順序が最初の例と変わらないように思われます。
This SO answerは、スコアリングシステムを作成することで、生のSQLでこれを行う方法をカバーしているようです。おそらくDjangoのORMでこれを実装する方法がありますか?
ええOK私は怠けているクエリセットを考え出しが問題でした。これは動作します - ありがとう! –