基于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)