【问题标题】:Modifying QuerySet result修改 QuerySet 结果
【发布时间】:2010-12-18 08:19:04
【问题描述】:

是否可以更改 QuerySet 对象中的某些特定项目?就我而言,我正在尝试对长度超过 40 个字符的“标题”字段进行切片,并在字段末尾附加“...”。

【问题讨论】:

  • 您是想将这些更改保存到数据库中,还是仅将它们显示在页面上?

标签: django slice django-queryset


【解决方案1】:

我建议为每个对象添加一个新属性“adjusted_title”

for item in your_query_set:
    if(len(item.title) > 40):
        item.adjusted_title = item.title[0:40] + "..."

【讨论】:

  • 这可行,但可能意味着通过查询集进行不必要的循环。最好将逻辑放在模型上的方法中,就像我建议的那样保存不必要的循环,以防其他地方需要逻辑。
【解决方案2】:

有两种方法可以做你想做的事。

首先是使用 Django 过滤器。因此,如果您正在遍历查询集的项目并将它们显示在页面上,请使用truncatewords 之类的内容。您可以在模板中这样使用:

{% for item in queryset %}
    <h1>{{ item.title|truncatewords:3 }}</h1>
{% endfor %}

看起来没有 Django 过滤器可以根据字符数截断。如果你想write your own filter这并不难。

另一种选择是在你的模型上放置一个方法来做你想做的事。这是一个例子:

@property
def short_title(self):
    return '%s...' % self.title[:40]

然后您就可以在模板中的任何位置将其引用为 {{ object.short_title }}。

【讨论】:

  • 嗨@sheats,我们可以在查询集中添加一个新的列字段吗?我想尝试在查询集中添加新值并使用for循环循环返回模板中的值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-20
  • 2011-07-08
  • 1970-01-01
  • 2017-10-28
  • 2012-04-28
相关资源
最近更新 更多