ナビゲーションバーに検索フィールドを作成しました。現在、検索では、タイトル、ユーザー名、first_name、last_nameで投稿が検索されます。「タイトル」で検索すると、100件の結果が得られる可能性があります。
保持したいナビゲーションバーでの現在の検索
<form class="navbar-form navbar-left" action="{% url 'posts:all' %}">
<div class="form-group">
<input type="text" class="form-control" placeholder="Search" name="q">
</div>
<button type="submit" class="btn btn-default">Submit</button>
</form>
洗練された検索ページ(新しいページ)を作成したいと思います。そのページには、4つの個別の検索フィールドがあります。例:
タイトルで投稿を検索:__検索ボックス_____
ユーザー名で投稿を検索する__検索ボックス____
first_nameで投稿を検索する__検索ボックス____
last_nameで投稿を検索する__検索ボックス____
これは、ビューがすべてのフィールドを組み合わせて検索する方法です。
class Postlist(SelectRelatedMixin, ListView):
model = Post
select_related = ('user', 'group')
def get_queryset(self):
queryset = super(Postlist, self).get_queryset()
query = self.request.GET.get('q')
if query:
queryset = queryset.filter(
Q(title__icontains=query)|
Q(user__username__iexact=query)|
Q(user__first_name__iexact=query)|
Q(user__last_name__iexact=query)
)
return queryset
質問が基本的すぎる場合は申し訳ありません。私はdjangoの初心者です。これを行うにはどうすればよいですか。名前の異なる4つのフォームがありますか?name = "q"の代わりに、form name = "a"、form name = "b"、form name = "c"などの例があります。また、ビューはどのように表示されますか
その新しいページあなたの話を約4 HTML入力フィールドを持つ単一のHTMLフォームを持つことができ、自身の持つ各name
属性(例:field_1
、field_2
、field_3
およびfield_4
)。
ビューは次のようになります。
def get_queryset(self):
qs = super().get_queryset()
final_q = Q() # empty Q that will be OR'ed together with the other statements
if len(self.request.GET.get('field_1', '')) > 0:
final_q |= Q(title__icontains=self.request.GET['field_1'])
if len(self.request.GET.get('field_2', '')) > 0:
final_q |= Q(user__username__iexact=self.request.GET['field_2'])
if len(self.request.GET.get('field_3', '')) > 0:
final_q |= Q(user__first_name__iexact=self.request.GET['field_3'])
if len(self.request.GET.get('field_4', '')) > 0:
final_q |= Q(user__last_name__iexact=self.request.GET['field_4'])
# apply Q to queryset
qs = qs.filter(final_q)
return qs
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加