sql >> Base de Datos >  >> RDS >> Mysql

Django ORM, Inserte Ninguno datetime como 0 en MySQL

Basándome en la solución de Seppo (que no funcionó para Django 1.9.4 debido a la falta de conexión.ops.value_to_db_datetime), terminé usando un DateTimeField personalizado de la siguiente manera:

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

Entonces simplemente use ZeroDateTimeField en sus modelos en lugar de DateTimeField.

funciona de maravilla y me las arreglé para decirle al cliente que arreglara su base de datos mysql;-)

EDITAR:terminé anulando el constructor para establecer null =True y blank =True para facilitar el uso de modelos generados automáticamente. Dado que esto puede ser útil para algunos, aquí está (esto es opcional y cuestionable):

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)