从Django DateTimeField获取日期

2024-06-07 11:30:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我想就此事请求一些帮助

我正在学习django并尝试一些代码,但我在尝试只从模型的DateTimeField获取日期时遇到了困难

以下是我正在研究的代码:

class APPLICANT_DATA(models.Model):
    SCHEDULED_AT = models.DateTimeField(null=True, blank=True)


def somefunction():
    app_data = APPLICANT_DATA.objects.all()
    for item in app_data:
        the_date = str(item.SCHEDULED_AT.strftime("%B-%d-%Y")) + ", " + the _date

我得到了('NoneType' object has no attribute 'strftime'),即使我的模型包含3条记录,它们都有日期和时间

我做错什么了?对新手有什么建议吗?非常感谢。


Tags: the代码模型trueappdatadatemodels
3条回答

SCHEDULED_AT设置为null=True,因此有时item.SCHEDULED_AT没有值,所以它是None。如果对None执行.strftime操作,则会出现错误。null=True表示django模型允许字段具有NULL值。

顺便说一句,对模型名和字段名使用所有大写是非常糟糕的做法,模型名应该是驼峰大小写,字段应该是带下划线的小写。模型名应该是ApplicantData,字段名应该是scheduled_at

虽然在给定的示例中,问题很可能是由于对象真正是None,如在其他答案中所述,但是请注意,如果您忘记通过调用(例如在您的DateTimeField中的full_clean())来清理数据,则可能在测试代码中遇到这种情况,如:

test_obj = YourModel(
    date=datetime.datetime(2016,2,26,tzfinfo=GM1),
    ...
)
test_obj.full_clean() # <-- don't forget this or you'll get a NoneType object
test_obj.save()

DateTimeField在Python中成为一个datetime.datetime对象

如果以后需要操作date对象,可以使用如下^{}直接从DateTimeField()中提取datetime.date对象:

class ApplicantData(models.Model):
    scheduled_at = models.DateTimeField(null=True, blank=True)

date = application_data.scheduled_at.date()

这是因为Django将把DateTimeField转换为Python类型datetime.datetime,我们在该类型上调用了date()

按照您的意愿格式化datetime.date

然后,您得到一个datetime.date对象,您可以使用^{}按您的意愿格式化它。

如果不需要date对象,也可以在strftime对象上使用datetime.datetime,这没有问题。只是你的对象中没有字段。

处理NULL/None字段

如果要在scheduled_at中允许空值,可以执行以下操作:

if application_data.scheduled_at is not None:
      date = application_data.scheduled_at.date()

相关问题 更多 >

    热门问题