sql >> Databáze >  >> RDS >> Mysql

Django ORM, vložte žádné datum a čas jako 0 do MySQL

na základě řešení Seppo (které nefungovalo pro django 1.9.4 kvůli chybějícímu connection.ops.value_to_db_datetime) jsem nakonec použil vlastní DateTimeField následovně:

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

Pak stačí ve svých modelech místo DateTimeField použít ZeroDateTimeField.

funguje jako kouzlo a musel jsem říct zákazníkovi, aby si opravil svou mysql db;-)

EDIT:Nakonec jsem přepsal konstruktor, abych nastavil null=True a blank=True, abych usnadnil použití automaticky generovaných modelů. Protože to může být pro někoho užitečné, zde je (toto je volitelné a sporné):

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)


  1. Příklady SUBTIME() – MySQL

  2. Náhodný řádek z velkého výsledku dotazu

  3. codeigniter:získávání dat mezi dvěma daty v mysql pomocí php

  4. Produkt Microsoft Office, který odmítá zemřít