我的两个模型具有datefield和datetimefield。它们存在于相同的models.py文件中,我想将它们设置为添加到数据库中时的默认值。更重要的是,我还想覆盖这些字段以生成用于测试它们的模型。
经过研究,我开始使用pytz和django.utils时区。当我尝试使用python内置的datetime(使用诸如timedelta等)覆盖它们时,我遇到的问题是运行时错误。因此,我尝试转换pytz.utc.localize(),但它抱怨我输入的datetime对象不是幼稚的,但是当我返回原始版本时,它仍然引发Runtime错误。我发现了很多解决方法,主要使用date = models.DateField(_("Date"), default=datetime.date.today)
之类的import datetime
之类的东西,但是这里的问题是我也想使用DateTimeField,现在只想使用DateField。因此,我将使用date = models.DateField(_("Date"), default=date.today)
,但这需要from datetime import date
。进口冲突,整个事情都困扰着我
class SomeTime(models.Model):
moment = models.DateTimeField(default=???, editable=True, blank=True)
class SomeDay(models.Model):
date = models.DateField(default=???, editable=True, blank=True)
我想去
m = SomeTime()
m.moment = #some datetime that I set, It should not throw a runtime error
m.save()
d = SomeDay()
d.date = #some date that I set, It should not throw a runtime error
d.save()
除了简单地创建这些对象外,SomeTime还必须保存当前日期时间到时刻,而SomeDay必须保存当前日期
答案 0 :(得分:1)
您正在发现没有问题的地方。如果您需要同时导入日期时间和日期,则只需导入。甚至更好的是,导入datetime模块并访问其中的两个类。
const validate = dateString => {
const day = (new Date(dateString)).getDay();
const month = (new Date(dateString)).getMonth()+1;
const number = (new Date(dateString)).getDate();
if (number == 25 && month == 12) {
return false;
}
return true;
}
// Sets the value to '' in case of an invalid date
document.querySelector('input').onchange = evt => {
if (!validate(evt.target.value)) {
evt.target.value = '';
alert("We cannot deliver cakes on this day. Please select another");
}
}
或者,如果愿意,可以先执行import datetime
class SomeTime(models.Model):
moment = models.DateTimeField(default=datetime.datetime.now, editable=True, blank=True)
class SomeDay(models.Model):
date = models.DateField(default=datetime.date.today, editable=True, blank=True)
,然后执行from datetime.import datetime, date
和default=datetime.now
。
答案 1 :(得分:0)
您需要先导入日期时间。
import datetime
然后从您的代码中
now = datetime.datetime.now()
m = SomeTime()
m.moment = now
m.save()
d = SomeDay()
d.date = now.date()
d.save()
答案 2 :(得分:0)
对于models.DateTimeField,请使用:
from django.utils.dateparse import parse_datetime
# set default date
default_date = parse_datetime('2000-01-01T00:00:00')
class SomeTime(models.Model):
date = models.DateTimeField(default=default_date)
您可以使用以下方式更新此字段:
from django.utils.timezone import now
filtered_sometime.update(date = now)
# with usage of time delta
filtered_sometime.update(date = now() + relativedelta(months=-1))
答案 3 :(得分:0)
您可以这样做。
import datetime
class SomeTime(models.Model):
moment = models.DateTimeField(default=datetime.datetime.now, editable=True, blank=True)
class SomeDay(models.Model):
date = models.DateField(default=datetime.date.today, editable=True, blank=True)
答案 4 :(得分:0)
要删除运行时警告,可以转到settings.py并注释掉“ USE_TZ = True”。这只是一个临时解决方案,我们希望找到一种在国际使用时完全避免运行时错误的方法