如何在相同的模型中设置默认日期字段并覆盖它,以及设置默认默认日期时间字段并覆盖它。

时间:2019-07-04 10:16:47

标签: python django datefield

我的两个模型具有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必须保存当前日期

5 个答案:

答案 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, datedefault=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”。这只是一个临时解决方案,我们希望找到一种在国际使用时完全避免运行时错误的方法