django中所有的model字段都拥有一个default参数,用来给字段设置默认值。可以用default=timezone.now来替换auto_now=True或auto_now_add=True。timezone.now对应着django.utils.timezone.now(),代码示例:
from django.utils import timezone
class Datacenter(models.Model):
id = models.UUIDField('机房ID', default=uuid.uuid4, primary_key=True)
zone = models.ForeignKey(Zone, verbose_name='所在区域', on_delete=models.PROTECT)
dc_name = models.CharField('机房', max_length=128, unique=True)
networks = models.CharField('IP地址段', max_length=128, blank=True, unique=True)
update_time = models.DateTimeField('更新时间', default=timezone.now())
def __str__(self):
return self.dc_name
class Meta:
verbose_name = '机房配置'
verbose_name_plural = '机房配置'
这里'update_time'字段默认值改为timezone.now()后,再次编辑已经能看到相应‘更新时间’字段,并且可修改:
更新时间已可修改
我们把时间天数加1天后,保存退出再观察‘更新时间’已经变为自定义时间:
保存后时间变为自定义时间
自定义日期格式:
刚创建的Django应用,可能你看到的日期显示格式跟下图类似(跟LANGUAGE_CODE和TIME_ZONE有关):
![可能的默认日期格式]
如果不习惯这种格式,自己定义显示格式的配置如下,更改Django的setting.py文件:
USE_L10N = False
DATE_FORMAT = 'Y-m-d'
DATETIME_FORMAT = 'Y-m-d H:i:s'
注意事项:如果USE_L10N设置为了True,那么语言环境规定的格式具有更高的优先级并将被应用,即DATE_FORMAT不生效。
这里可用的格式化字符串的其他写法参见Django官方文档:
<>;
Available format strings,部分截图:
format stringsDjango中的日期处理注意事项和自定义时间格式转换
另外在Django页面渲染的时候,html页面从数据库中读出DateTimeField字段时,显示的时间格式和数据库中存放的格式不一致,另外一个解决办法:可以在页面格式化时间,添加{{ Datacenter.updatetime|date:"Y-m-d H:i:s" }}类似的过滤器。之后刷新页面,即可正常显示。
相关文档:
https://docs.djangoproject.com/en/2.0/ref/settings/
Flask+uWSGI+Nginx+Ubuntu部署教程
Ubuntu 16.04下安装部署 Nginx+uWSGI+Django1.9.7
Ubuntu 16.10 下部署Django+uWSGI+Nginx服务器
Nginx+uWSGI+Django在Ubuntu下的部署
uWSGI+Nginx+Django安装和配置
Ubuntu下通过Nginx部署Django
Django运算表达式与Q对象/F对象 https://www.linuxidc.com/Linux/2018-05/152509.htm
Django 错误之 No module named ‘MySQLdb’ https://www.linuxidc.com/Linux/2018-04/151991.htm
Ubuntu 16.04 LTS Django虚拟开发环境配置
Linux公社的RSS地址:https://www.linuxidc.com/rssFeed.aspx