2017-06-11 6 views
0

リストで注文したいユーザーのリストがあります。 Webページにすべてのユーザーが表示されます。私はこのような、たとえばAまたはBで始まるユーザーだけを表示したい:AかBだけで始まる名前を表示する方法

A________________________________ アルバート

B________________________________ バーナード はボリス

C_________________________________ チャーリーは

私はすべて表示する方法を知っていますユーザー:

`{% for user in user_list.objects.all %} 
     {{ user.name }} 
{% endfor %}` 

Aで始まるユーザーのみをフィルタリングするにはどうすればよいですか?

答えて

0

あなたの質問は実際には2つの部分である:どのように私は、名前いずれか AまたはBで始まるユーザーのためのフィルタリングん

  1. フィルタを適用したユーザークエリーセットでテンプレートをレンダリングするにはどうすればよいですか?

Djangoのクエリセットは、彼らが一緒にAND演算されているが、デフォルトでは、複数のexpresssionsによってフィルタリングすることができます。文字列が「A」と「B」

User.objects.filter(name__istartswith='a').filter(name__istartswith='b') 

したり、表現の両方で始めることはできませんので、以下は、無意味だろう、あなたはQオブジェクトを使用する必要があります。構文は意図的に制限されているよう

from django.db.models import Q 

User.objects.filter(Q(name__istartswith='a') | Q(name__istartswith='b')) 

あなたは自明テンプレートの内部でこのフィルタを作成することはできません。これにより、テンプレートに多すぎるロジックが含まれなくなります。代わりに、ビューの内側にuser_listを上書きする必要があります。汎用のListViewクラスを使用している場合は、get_querysetをオーバーライドすることでこれを達成できます。

関連する問題