Django: добавление дополнительных свойств в объект класса модели - PullRequest
1 голос
/ 12 апреля 2009

Это использует 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 и добавьте другие параметры, которые помогут с макетом, такие как «подсветка», «цвет фона» и т. д. *

Единственный способ, о котором я подумал, - это перебрать исходный объект Query и создать новый список, в который я бы добавил значения свойств и затем добавил его обратно в список.

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

Затем, вместо того, чтобы передавать шаблон .html messagesSQL, я сейчас передам ему msglist.

Ответы [ 2 ]

5 голосов
/ 12 апреля 2009

Вы по-прежнему сможете отправлять сообщения messagesSQL в шаблон после добавления в него элементов через цикл for. 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 голосов
/ 12 апреля 2009

Вы можете получить это, определив методы в модели как

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

Теперь в шаблоне вы можете использовать его как

Time since created {{ message.since_date_created }}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...