2009-11-19 164 views
2

是否可以更改QuerySet對象中的某些特定項目?在我的情況下,我試圖切割長度超過40個字符的「標題」字段,並在字段末尾添加「...」。修改查詢集結果

+0

你是想保存這些更改到數據庫,或者只顯示他們的網頁上? – sheats 2009-11-19 15:22:27

回答

3

有兩種方法可以做你想做的。

第一個是使用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}}。

+0

謝謝,已添加到我自己的/ r/todayLarned – sadegh 2009-11-19 16:17:28

1

我建議增加一個新屬性「adjusted_title」每個對象

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

這可以工作,但可能意味着通過查詢集進行不必要的循環。將模型中的邏輯放在模型中的方法可能會更好,就像我建議要保存一個不必要的循環,並且在其他地方需要邏輯。 – sheats 2009-11-19 15:47:26