dựa trên giải pháp của Seppo (không hoạt động cho django 1.9.4 vì thiếu connection.ops.value_to_db_datetime), tôi đã kết thúc bằng cách sử dụng DateTimeField tùy chỉnh như sau:
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
Sau đó, chỉ cần sử dụng ZeroDateTimeField trong các mô hình của bạn thay vì DateTimeField.
hoạt động như một sự quyến rũ và tôi đã phải nói với khách hàng để sửa lỗi mysql db của họ;-)
CHỈNH SỬA:Tôi đã kết thúc việc ghi đè hàm tạo để đặt null =True và blank =True để dễ sử dụng các mô hình được tạo tự động. Vì điều này có thể hữu ích cho một số người, đây là nó (điều này là tùy chọn và có thể nghi ngờ):
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)