如何在django admin 中显示facebook / twitter中使用的时间/日期格式?
from django.db import models
from datetime import datetime
class Course(models.Model):
date = models.DateTimeField(auto_now_add=True)
title = models.CharField(max_length=255)
description = models.TextField()
def get_date(self):
time = datetime.now()
if self.date.day == time.day:
return str(time.hour - self.date.hour) + " hours ago"
else:
if self.month == time.month:
return str(time.day - self.date.day) + " days ago"
return self.date
def __str__(self):
return self.title
Admin.py
from django.contrib import admin
from .models import Course
@admin.register(Course)
class CourseAdmin(admin.ModelAdmin):
list_display = ('title', 'description', 'get_date',)
尝试了一些组合来导入日期/时间,但仍然会出现错误,如图所示。
如果我使用get_date:我收到以下错误:
AttributeError at /admin/courses/course/
'Course' object has no attribute 'month'
Request Method: GET
Request URL: http://localhost:8000/admin/courses/course/
Django Version: 1.10.5
Exception Type: AttributeError
Exception Value:
'Course' object has no attribute 'month'
Exception Location: /courses/models.py in get_date, line 17
在人类时间显示created_at和updated_at的预期结果。 显示
预期结果:2天前,或3小时前。或者更好,几个小时前。
答案 0 :(得分:6)
结果是可以直接从Python代码库访问模板过滤器。像这样:
from django.contrib.humanize.templatetags import humanize
class Example(models.Model):
date = models.DateTimeField(auto_now_add=True)
def get_date(self):
return humanize.naturaltime(self.created_at)
get_date()
函数也可以位于您的CourseAdmin
类中。
答案 1 :(得分:5)
有一个可接受的答案,但是我想建议另一个人来这里寻求可在模板中使用的解决方案。
Django有一个名为django.contrib.humanize
的contrib软件包。将此添加到您的INSTALLED_APPS,然后在模板中使用{% load humanize %}
,之后,您可以使用value|naturaltime
模板标记。 “值”将是您的日期。
假设content.created
,其中包含您内容的创建日期。这是一个datetimefield对象。因此,您可以使用以下命令:content.created|naturaltime
。它将日期从例如2018年7月14日11:30转换为“ 3天1小时前”。
答案 2 :(得分:3)
您可以在模型中使用额外的方法,如下所示:
min-height
或者您可以为此创建一些utils函数,如果您想在更多情况下使用它,只需在模型方法中使用它
这是Django管理员的文档,在这里您可以找到所需的一切: https://docs.djangoproject.com/en/1.10/ref/contrib/admin/