首页 > 解决方案 > 如何设置默认日期字段并覆盖它以及设置默认默认日期时间字段并覆盖它,所有这些都在同一个models.py中

问题描述

我的两个模型有 datefield 和 datetimefield。它们存在于同一个 models.py 文件中,我想在添加到数据库/存在时将它们设置为默认值。更重要的是,我还想覆盖这些字段以生成模型来测试它们。

经过一番研究,我开始使用 pytz 和 django.utils 时区。当我尝试使用 python 的内置日期时间(使用 timedelta 等)覆盖它们时,我遇到的问题是运行时错误。所以我尝试转换 pytz.utc.localize(),但它抱怨我喂给它的 datetime 对象并不幼稚,但是当我回到原来的版本时,它仍然抛出运行时错误。我找到了很多方法来克服这个问题,主要是使用date = models.DateField(_("Date"), default=datetime.date.today)which requires之类的东西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 必须保存当前日期

标签: pythondjangodatefield

解决方案


你会发现没有问题的地方。如果您需要同时导入日期时间和日期,那么就这样做。或者更好的是,导入 datetime 模块并访问其中的两个类。

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, datethendefault=datetime.nowdefault=date.today


推荐阅读