如何显示仅以A或B开头的名称

时间:2017-06-11 18:42:54

标签: django-queryset

我有一个用户列表,我想在列表中订购。该网页现在显示所有用户。我想只显示以A或B开头的用户,例如:

一个________________________________ 阿尔伯特

乙________________________________ 伯纳德 鲍里斯

Ç_________________________________ 查理

我知道如何向所有用户展示:

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

我们如何过滤仅以A开头的用户?

1 个答案:

答案 0 :(得分:0)

你的问题实际上是两个部分:

  1. 如何过滤名称以 A或B?
  2. 开头的用户
  3. 如何使用已过滤的用户查询集呈现模板?
  4. Django查询集可以通过多个表达式进行过滤,但是默认情况下它们是AND并在一起。以下将是荒谬的,因为字符串不能以'a'和'b'

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

    要对表达式进行OR运算,您需要使用Q个对象。

    from django.db.models import Q
    
    User.objects.filter(Q(name__istartswith='a') | Q(name__istartswith='b'))
    

    由于语法是有意限制的,因此您无法在模板内部轻松构建此过滤器。这可以防止模板包含太多逻辑。相反,您需要覆盖视图内的user_list。如果您使用的是通用ListView类,则可以通过覆盖get_queryset来完成此操作。