【问题标题】:How to get Substr of values如何获取值的 Substr
【发布时间】:2016-02-15 08:02:00
【问题描述】:

您好,我的 views.py 中有以下查询

m = Request.objects.filter(Q(type__icontains='4'), Q(wt__in =['giga','mega']))
context['all_items'] = m.values('type1').order_by('type1')

它的给定值sasoo, masoo, pisoo, kusoo etc.

在这种情况下如何实现 Django Substr,以便我的 html 将值显示为 sa, ma, pi, ku, ..

【问题讨论】:

  • 没有 Substr,这会给你同样的结果:context['all_items']=[{'type1':x[0]['type1'][0:1]} for x in m.values('type1').order_by('type1')]

标签: python django substr


【解决方案1】:

你可以annotate模特

from django.db.models.functions import Substr
m = Request.objects.filter(Q(type__icontains='4'), Q(wt__in =['giga','mega']))
context['all_items'] = m.annotate(mysubstring=Substr('type1',1,2)).order_by('type1')

在模板中:

{% for obj in all_items %}
    {# Use obj.mysubstring #}
{% endfor %}

【讨论】:

  • 嗨 Sayse:试过了。但是我收到了这个错误No module named functions。有什么想法吗?
  • @vellattukudy - 你使用的是什么版本的 django?
  • @Sayse:order_by 在注释之前还是之后有关系吗?似乎确实如此,字母越少,排序可能会有所不同
  • Django 版本 1.6.5
  • @vellattukudy - Substr 是在1.8 中添加的,你不能在 1.6.5 中使用它,切片可能是你唯一的选择
【解决方案2】:

您可以在模板中使用slice 过滤器:

{% for item in all_items %}
  {{ item.type1|slice:":2" }}
{% endfor %}

【讨论】:

    【解决方案3】:

    一个班轮

    context['all_items'] = [i[:2] for i in context['all_items']]
    

    【讨论】:

    • 如果这是基于操作的原始代码构建的,那么它将无法工作,因为您无法对字典对象进行切片
    猜你喜欢
    • 2020-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-22
    相关资源
    最近更新 更多