【问题标题】:Django: Adding additional properties to Model Class ObjectDjango:向模型类对象添加附加属性
【发布时间】:2009-04-12 04:36:51
【问题描述】:

这是使用 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。

【问题讨论】:

    标签: python django google-app-engine


    【解决方案1】:

    在通过 for 循环向模板添加元素后,您应该仍然能够将消息 SQL 发送到模板。 Python 允许这样的事情。

    在某些情况下可能有意义的其他方法是提供您的 MessageModel 方法。例如,如果你有一个

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

    那么(假设你的模板中有“messagesSQL”),就可以使用函数as

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      Time since created {{ message.since_date_created }}
      

      【讨论】:

      • 非常感谢您的回答,我将第一个答案标记为正确答案,因为它是第一个,但我也想对您表示感谢。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-14
      • 2018-09-13
      • 2022-01-08
      • 1970-01-01
      • 1970-01-01
      • 2021-06-19
      • 1970-01-01
      相关资源
      最近更新 更多