gpt4 book ai didi

python - Django ORM,将无日期时间作为 0 插入 MySQL

转载 作者:太空狗 更新时间:2023-10-29 21:07:24 24 4
gpt4 key购买 nike

我有一个 MySQL 数据库,它被除 Django 之外的另一个应用程序使用。该应用程序使用 '0000-00-00 00:00:00' 作为日期时间的默认值。

Django (v1.5.5) 在读取数据库时将 '0000-00-00 00:00:00' 日期时间解释为 NoneNone 写入数据库时​​为 NULL。这会导致错误,因为数据库将字段定义为 NOT NULL

手动设置:

model.datetime = '0000-00-00 00:00:00'

不起作用,因为 Django 认为这是一个无效日期。

如何创建自定义日期时间字段,将 None 插入为 '0000-00-00 00:00:00'

最佳答案

基于 Seppo 的解决方案(由于缺少 connection.ops.value_to_db_datetime 而不适用于 django 1.9.4),我最终使用了自定义 DateTimeField,如下所示:

from django.db import models

class ZeroDateTimeField(models.DateTimeField):
def get_db_prep_value(self, value, connection, prepared=False):
value = super( ZeroDateTimeField, self ).get_db_prep_value( value, connection, prepared )
if value is None:
return "0000-00-00 00:00:00"
return value

然后只需在您的模型中使用 ZeroDateTimeField 而不是 DateTimeField。

工作起来很有魅力,我不得不告诉客户修复他的 mysql 数据库 ;-)

编辑:我最终覆盖构造函数以设置 null=True 和 blank=True 以简化自动生成模型的使用。由于这对某些人可能有用,所以在这里(这是可选的和有问题的):

def __init__(self, verbose_name=None, name=None, auto_now=False, auto_now_add=False, **kwargs):
kwargs['null'] = True
kwargs['blank'] = True
super( ZeroDateTimeField, self ).__init__(verbose_name, name, auto_now, auto_now_add, **kwargs)

关于python - Django ORM,将无日期时间作为 0 插入 MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21382250/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com