Django模型设置问题解决

如何日期(DateTimeField)实现可编辑

auto_now和auto_now_add被设置为True后,这样做会导致字段成为editable=False和blank=True的状态。editable=False将导致字段不会被呈现在admin中,blank=Ture表示允许在表单中不输入值。

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):
    update_time = models.DateTimeField('更新时间', default=timezone.now())

这里'update_time'字段默认值改为timezone.now()后,再次编辑已经能看到相应‘更新时间’字段,并且可修改。


UPDATE:

再次操作会出现下面的错误情况:

 HINT: It seems you set a fixed date / time / datetime value as default for this field. This may not be what you want. If you want to have the current date as default, use `django.utils.timezone.now`

原因未知,消除警告的方法可见链接详解:

https://stackoverflow.com/questions/38237777/django-timezone-now-vs-timezone-now

models.DateTimeField(default=timezone.now())

改为

models.DateTimeField(default=timezone.now)

做法1 暴力做法

使用python manage.py flush命令清空所有数据表中的数据,然后再删除migrations文件夹里所有py文件(除了init.py)。我们的模型一下回到原点,变成全新模型了,自然不会有问题啦。缺点是所有已有数据都丢失了。

做法2 推荐做法

先删除migrations文件夹里所有py文件(除了init.py),再运行运行python manage.py migrate。这时仅不符合新数据要求的company字段数据(比如Baidu)丢失,John和Max对象还在。如果数据表中已存在的数据还有价值,建议先对数据库被备份再执行migrate命令迁移。

此小节为转载:
作者:妄心xyx
链接:https://www.jianshu.com/p/d52783987fec
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

你可能感兴趣的:(Django模型设置问题解决)