Django:向Model Class Object添加其他属性

时间:2009-04-12 04:36:52

标签: python django google-app-engine

这是使用Google App Engine。我不确定这是否适用于正常的Django开发或者Google App Engine是否会发挥作用。如果确实如此,您能否让我知道,以便我可以更新此问题的描述。

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”以输出多久以前最后一个输出,可能会使用message属性,并添加其他有助于布局的参数,如“highlight”,“background-color”等......

我想到的唯一方法是遍历初始查询对象并创建一个新列表,我将添加属性值,然后将其追加回列表。

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

然后我将传递给msglist,而不是传递template.html messagesSQL。

2 个答案:

答案 0 :(得分: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 %}

基本上,你可以调用模型中的任何方法,只要它不需要传递给它的参数。

答案 1 :(得分:4)

您可以通过在模型中定义方法来获得它 像

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

现在在模板中,您可以像

一样使用它
Time since created {{ message.since_date_created }}