我有一个模型,我希望name
字段是时间戳的字符串表示形式,另一个字段是实际时间戳。这是我的模型代码:
from django.db import models
from datetime import datetime
class Image(models.Model):
name = models.CharField(max_length=255, default=datetime.now().strftime("%Y%m%d-%H%M%S"))
create_date = models.DateTimeField(auto_now_add=True)
image = models.ImageField(upload_to="images/")
然后我进入Django shell,然后输入以下内容:
>>> import models
>>> models.Image(image='images/rock.png').save()
这可行,但唯一的问题是两次未对齐。例如,我得到name = 20191201-143119
和create_date = 2019-12-01 14:32:11.445474
。
如何使这两个日期时间相同?
答案 0 :(得分:1)
我已经链接了answer,可以帮助您了解正在发生的事情。不过,实现您想要的东西很简单。
models.py
from django.db import models
from datetime import datetime
class Image(models.Model):
name = models.CharField(max_length=255)
create_date = models.DateTimeField(auto_now_add=True)
image = models.ImageField(upload_to="images/")
def save(self, *args, **kwargs):
if not self.name:
self.name = datetime.now().strftime("%Y%m%d-%H%M%S")
super(Image, self).save(*args, **kwargs)
答案 1 :(得分:1)
这是Django世界中很常见的陷阱。 @ eliakin-costa提到的帖子讨论了此问题,尽管我不建议重写save
方法来获得此行为,因为创建函数更容易(保持解耦和显式):
from django.db import models
from django.utils import timezone
def default_image_name():
return timezone.now().strftime("%Y%m%d-%H%M%S")
class Image(models.Model):
name = models.CharField(max_length=255, default=default_image_name)
create_date = models.DateTimeField(auto_now_add=True)
image = models.ImageField(upload_to="images/")
顺便问一下,您是否看过这个docs(upload_to
也接受可通话对象)?表格中是否确实需要一个name
列?