Str*_*ker 2 django datetime django-admin
如何在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
Run Code Online (Sandbox Code Playgroud)
管理员
from django.contrib import admin
from .models import Course
@admin.register(Course)
class CourseAdmin(admin.ModelAdmin):
list_display = ('title', 'description', 'get_date',)
Run Code Online (Sandbox Code Playgroud)
如果我使用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
Run Code Online (Sandbox Code Playgroud)
预期结果将在人工时间内显示created_at和Updated_at。显示
预期结果:2天前或3小时前。甚至更好,几个小时前。
有一个可以接受的答案,但是我想建议另一个人来这里提出可以在模板中使用的解决方案。
Django有一个名为的contrib软件包django.contrib.humanize。将此添加到您的INSTALLED_APPS,然后{% load humanize %}在模板中使用,之后,您可以使用value|naturaltime模板标记。“值”将是您的日期。
假设content.created,其中包含您内容的创建日期。这是一个datetimefield对象。因此,您可以使用:content.created|naturaltime。它将日期转换为例如从2018年7月14日11:30到“ 3天1小时前”。
结果证明模板过滤器可以直接从你的 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.date)
Run Code Online (Sandbox Code Playgroud)
该get_date()函数也可以位于您的CourseAdmin类中。
您可以在模型中使用额外的方法,如下所示:
class Example(models.Model):
date = models.DateTimeField(auto_now_add=True)
def get_date(self):
time = datetime.now()
if self.created_at.day == time.day:
return str(time.hour - self.created_at.hour) + " hours ago"
else:
if self.created_at.month == time.month:
return str(time.day - self.created_at.day) + " days ago"
else:
if self.created_at.year == time.year:
return str(time.month - self.created_at.month) + " months ago"
return self.created_at
Run Code Online (Sandbox Code Playgroud)
或者您可以为此创建一些实用程序函数,如果您想在更多情况下使用,只需在模型方法中使用它
这是 Django 管理员的文档,在这里您可以找到所需的一切:https : //docs.djangoproject.com/en/1.10/ref/contrib/admin/
| 归档时间: |
|
| 查看次数: |
1700 次 |
| 最近记录: |