2009-04-12 66 views
1

這是使用Google App Engine。我不確定這是否適用於正常的Django開發,或者Google App Engine是否會參與其中。如果是這樣,你會讓我知道,所以我可以更新這個問題的描述。Django:向模型類對象添加其他屬性

class MessageModel(db.Model): 
    to_user_id = db.IntegerProperty() 
    to_user = db.StringProperty(multiline=False) 
    message = db.StringProperty(multiline=False) 
    date_created = db.DateTimeProperty(auto_now_add=True) 

現在,當我做一個查詢得到「MessageModel」的列表,並將其發送到綁定對template.html,我想包括一些更多的屬性,如「since_date_created」輸出自上次輸出多久以前,可能會使用消息屬性並添加其他參數,這些參數將有助於「高亮」,「背景色」等佈局......

我想到的唯一方法是是循環遍歷初始查詢對象,並創建一個新的列表,我將添加屬性值,然後將其附加回列表中。

for msg in messagesSQL: 
    msg.lalaland = "test" 
      msg.since_created_time = 321932 
      msglist.append(msg) 

然後,我不再傳遞template.html messagesSQL,而是傳遞msglist。

回答

5

在通過for循環向其中添加元素後,仍然應該能夠將messagesSQL發送到模板。 Python允許這樣的事情。

在某些情況下可能有意義的其他內容是給你的MessageModel方法。舉例來說,如果你有一個

def since_date_created(self): 
    '''Compute the time since creation time based on self.date_created.''' 

然後(假設你有「messagesSQL」模板),你可以使用函數作爲

{% for msg in messagesSQL %} 
    {{ msg.since_date_created }} 
{% endfor %} 

基本上,你可以調用任何方法模型只要你不需要傳遞給它的參數。

4

您可以在模板中定義方法模型 像

class MessageModel(db.Model): 
    # Definition 
    def since_date_created(self): 
     # ... 

現在得到的是,你可以使用它像

Time since created {{ message.since_date_created }} 
+0

非常感謝答案,我標誌着第答案自第一次起就是正確的答案,但我也想讚賞你。 – TimLeung 2009-04-12 23:15:13

相關問題