我有一个用户列表,我想在列表中订购。该网页现在显示所有用户。我想只显示以A或B开头的用户,例如:
一个________________________________ 阿尔伯特
乙________________________________ 伯纳德 鲍里斯
Ç_________________________________ 查理
我知道如何向所有用户展示:
`{% for user in user_list.objects.all %}
{{ user.name }}
{% endfor %}`
我们如何过滤仅以A开头的用户?
答案 0 :(得分:0)
你的问题实际上是两个部分:
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
来完成此操作。