Django:向模型类对象添加额外属性
这是在使用谷歌的应用引擎。我不太确定这是否只适用于普通的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 %}
基本上,只要这个方法不需要传入任何参数,你就可以调用模型中的任何方法。