Django中如何实现页面卡片按客户名称字母升序排列
要实现卡片按客户名称字母升序排列,直接调整Django的查询排序规则即可,推荐以下两种方案:
方案1:修改视图查询逻辑(按需排序,推荐)
在views.py的outgoinggallery函数中,对OutgoingLRU的查询结果使用order_by方法,通过双下划线跨关联表取分类名称(即客户名称)做升序排序,修改后的代码如下:
def outgoinggallery(request): user = request.user category = request.GET.get('category') if category == None: # 新增order_by按关联分类的名称升序排列 alloutgoinglru = OutgoingLRU.objects.filter(category__user=user).order_by('category__name') else: # 新增order_by按关联分类的名称升序排列 alloutgoinglru = OutgoingLRU.objects.filter(category__name=category, category__user=user).order_by('category__name') categories = Category.objects.filter(user=user) context = {'categories': categories, 'alloutgoinglru': alloutgoinglru} return render(request, 'Outgoing/outgoinggallery.html', context)
方案2:模型层设置全局默认排序
如果希望所有OutgoingLRU的查询默认都按客户名称升序排列,不需要每次查询单独加排序规则,可以直接在models.py的OutgoingLRU类的Meta属性中添加默认排序配置:
class OutgoingLRU(models.Model): class Meta: verbose_name = 'OutgoingLRU' verbose_name_plural = 'OutgoingLRUs' # 新增默认排序规则,按分类名称升序 ordering = ['category__name'] # 其余原有字段代码保持不变
补充说明
如果你的业务中存在category为空的记录,希望空值统一排在最后,可以将排序逻辑调整为:
from django.db.models import F alloutgoinglru = OutgoingLRU.objects.filter(category__user=user).order_by(F('category__name').asc(nulls_last=True))
内容的提问来源于stack exchange,提问作者Rainysky
相关产品推荐
相关产品推荐

