2014-01-06 65 views
0

我從來沒有讀過任何關於在視圖中創建的臨時數據的附加模型,但我只是玩弄它,一切似乎都很好。我想知道是否有人知道這個技術名稱,所以我可以更多地瞭解它的靈活性。這些臨時數據持有者的技術術語是什麼?

在我的Django的看法我有

for todo in my todolist: 
    todo.shorthand = todo.user + todo.name 
    todo.active = len(Posting.objects.filter(user=todo.user) 
... 
context = {'todolist':todolist} 

兩個速記和活躍程度在模型中沒有示範田,但如果我在我看來,這些設置,我可以像這樣的東西叫他們在我的模板?

{% for todo in todolist|dictsortreversed:"active" %} 
    <p> {{todo.shorthand}} {{todo.active}} </p> 
{% endfor %} 

我不僅可以創建臨時數據,還可以使用它與dictsort和其他過濾器。如果這是一個新發現,那真棒。

+0

它們只是python對象的普通屬性。沒有什麼特別的事實,他們不在你的數據庫。 – geoffspear

回答

4

這裏沒有技術術語。你可以在你的Python實例上創建附加的任意屬性。由於這些屬性沒有在你的模型中定義,所發生的只是Django不會將它們持久存儲回數據庫。

當您從數據庫查詢對象時,Django通常會爲您創建新實例,但這些對象可能會在請求之間緩存。當他們這樣做時,那麼你創建的這些屬性將仍然存在。您的代碼需要考慮到這種可能性。

在這種情況下,您可以爲視圖的這些屬性指定新值,覆蓋之前設置的任何以前的值。

+1

可能值得注意的是,你*無法*創建任何屬性的實例的類定義['__slots__'](http://docs.python.org/2/reference/datamodel.html#slots)。 –

+1

@LukasGraf:既然我們在這裏處理Django模型,那很少見。 –

+0

謝謝!我在哪裏可以學習如何緩存這些屬性的請求? – theptrk