2013-07-01 5 views
2

Я слабо помню, как это делалось раньше в учебниках в прошлом. Тем не менее, им не удалось выяснить, как именно в документах в настоящее время.Как отправить модели django в шаблон с дополнительными настраиваемыми полями?

Предположим, у нас была модель под названием Post. Эта модель имеет поле под названием timestamp. Однако, когда мы отправляем эту модель в шаблон, нам не нужны временные метки. Вместо этого нам нужен более популярный «возраст» (созданный X mins/hrs ago), который, к счастью, можно вывести из метки времени.

Вместо того, чтобы создавать новое поле для метки времени, а вместо использования пользовательских тегов шаблонов мы можем как-то добавить поле к модели временно, прежде чем отправить его нашему шаблону?

Ex.

# views.py 
# Is the below code right? do I need to save()? 
posts = Posts.objects.filter(...).filter(...)[:X] 
for post in posts: 
    # Post does not have an age field, we are creating one 
    # temporarily before sending it to the template 
    post.age = some_function(post.timestamp) 

return render_to_response(template, {'posts' : posts}, etc...) 

спасибо.

ответ

6

Просто сделайте это property по модели.

class Post(Model) 
    @property 
    def age(self): 
    return now() - self.timestamp 
+0

Каковы последствия между @properties и django? Будет ли это рассматриваться как обычное поле? Мне не нужна колонка для возраста. Если столбец не создан, как именно обрабатываются эти свойства? И что еще более важно, в фактическом шаблоне, действительно ли свойство «возраст» доступно? –

+0

Свойства никогда не становятся полем в таблице. Они обрабатываются самим классом модели. Доступны все атрибуты любого объекта, переданного в средство визуализации шаблонов. –

+0

Спасибо. Если вы знаете, все еще любопытно, работает ли мой пример кода выше? Когда я это пробовал, он не работает, но я думаю, может быть, есть синтаксическая ошибка где-то ... –

Смежные вопросы