2016-05-18 138 views
1

有一个模型代表BBS。我怎样才能简化这个python语句

我想更改没有更新数据库的值。因为我想保留数据库值。准确地说,在显示时间,我希望它显示为'[collabo]' + article.title这是我现在正在做的。

下面是结合“[collabo]”和的标题所有for循环

for article in articles: 
    article.title = '[collabo]'+article.title 

有任何方法在一个代码行更改标题值?我不想更改或更新数据库。或者,还有更好的方法。

+0

我知道,但我找到了这样的最短代码。 article.title ='[xxx]'+ F('title'),但这不行。任何方式感谢您的建议。 – eachone

+0

什么是用例?你为什么要将结果保存在'article.title'中,但不保存在数据库中?如果你想在模板中表示这个,那么你可以在那里添加前缀,而不是在视图中。 – karthikr

回答

1

如果你想在单个数据库查询中做到这一点,它是比现在更长的一行!但效率更高。

from django.db.models import Value 
from django.db.models.functions import Concat 

Article.objects.annotate(new_title = Concat(V('[collabo]'),'title'))) 

在查询集的annotate方法在这里是你的朋友(与Concat的和值的帮助不大)

你也可以做到这一点在模板级别

文章= Article.objects。所有() 渲染( 'template.html',{ '文章':文章})

然后

{% for article in articles %} 
    [collabo] {{ article.title }} 

{% endfor %} 
0

你可以使用模型类的方法来给你想要的特定修改。

models.py

class Article(models.Model): 
    # some fields ... 

    def edited_title(self): 
     return '[collabo] {}'.format(self.title) 

,那么你可以用{{article.edited_title}}利用它的模板。