Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Django ORM, fügen Sie None datetime als 0 in MySQL ein

Aufbauend auf Seppos Lösung (die für Django 1.9.4 wegen fehlender connection.ops.value_to_db_datetime nicht funktionierte), habe ich schließlich ein benutzerdefiniertes DateTimeField wie folgt verwendet:

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

Dann verwenden Sie in Ihren Modellen einfach ZeroDateTimeField anstelle von DateTimeField.

funktioniert wie ein Zauber und ich musste dem Kunden sagen, dass er seine mysql db reparieren soll;-)

BEARBEITEN:Am Ende habe ich den Konstruktor überschrieben, um null=True und blank=True festzulegen, um die Verwendung automatisch generierter Modelle zu erleichtern. Da dies für einige nützlich sein kann, hier ist es (dies ist optional und fragwürdig):

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)