Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Django ORM, Insert None datetime como 0 no MySQL


com base na solução do Seppo (que não funcionou para o django 1.9.4 devido à falta de connection.ops.value_to_db_datetime), acabei usando um DateTimeField personalizado da seguinte forma:
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

Em seguida, basta usar ZeroDateTimeField em seus modelos em vez de DateTimeField.

funciona como um encanto e eu tive que dizer ao cliente para corrigir seu banco de dados mysql;-)

EDIT:Acabei substituindo o construtor para definir null=True e blank=True para facilitar o uso de modelos gerados automaticamente. Como isso pode ser útil para alguns, aqui está (isso é opcional e questionável):
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)