Eu *_*Chi 4 django django-models django-queryset
我有一个显示在如下模板中的用户列表。
{% for u in users_list %}
{{u.name}}
{% endif %}
Run Code Online (Sandbox Code Playgroud)
是否可以将两个或多个用户排在顶部?
例如,对于一个用户,当当前用户访问该列表时,可以在将变量发送到模板之前排除我,从而在没有特定顺序的情况下将他排名在顶部。
1) me
2) user2
3) user3
Run Code Online (Sandbox Code Playgroud)
如果要在查询集的顶部按ID对特定对象进行排序,则可以对条件表达式进行排序-例如,将当前用户置于顶部,并按名称对其他用户进行排序:
from django.db.models import Case, When
from django.contrib.auth.models import User
users = User.objects.order_by(
Case(When(id=request.user.id, then=0), default=1),
'last_name',
'first_name'
)
Run Code Online (Sandbox Code Playgroud)
要将多个对象放在顶部,只需调整When
条件:
ids_at_top = [1, 2]
users = User.objects.order_by(
Case(When(id__in=ids_at_top, then=0), default=1))
Run Code Online (Sandbox Code Playgroud)
我也将考虑是否可以通过更简单的方式实现所需的功能-例如,您可以获取当前用户,将其从主查询集中排除,然后像这样单独显示在模板中
# in the view
current_user = request.user
users = User.objects.exclude(id=current_user.id)
# in the template
{{ current_user.name }}
{% for u in users %}
{{ u.name }}
{% endif %}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
454 次 |
最近记录: |