Django:向模型类对象添加额外属性

1 投票
2 回答
2471 浏览
提问于 2025-04-15 11:06

这是在使用谷歌的应用引擎。我不太确定这是否只适用于普通的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”,用来输出距离上次输出有多长时间。我还想调整一下消息的属性,添加其他参数来帮助布局,比如“highlight”(高亮)和“background-color”(背景颜色)等等。

我想到的唯一方法就是遍历最初的查询对象,创建一个新列表,在里面添加属性值,然后再把它加回到列表里。

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

然后,我不再把messagesSQL传给template.html,而是把msglist传过去。

2 个回答

4

你可以通过在模型中定义方法来实现这个功能,方法就像是给模型添加一些可以执行的操作。

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

现在在模板中,你可以像这样使用它。

Time since created {{ message.since_date_created }}
5

在你通过循环添加了元素之后,仍然可以向模板发送消息SQL。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 %}

基本上,只要这个方法不需要传入任何参数,你就可以调用模型中的任何方法。

撰写回答