2016-05-18 183 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}}利用它的模板。