sql >> Database teknologi >  >> RDS >> Mysql

Django ORM, Indsæt ingen dato og klokkeslæt som 0 i MySQL

baseret på Seppos løsning (som ikke fungerede for django 1.9.4 på grund af manglende forbindelse.ops.value_to_db_datetime), endte jeg med at bruge et tilpasset DateTimeField som følger:

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

Så brug bare ZeroDateTimeField i dine modeller i stedet for DateTimeField.

fungerer som en charme, og jeg kom uden om at skulle bede kunden om at rette sin mysql db;-)

EDIT:Jeg endte med at tilsidesætte constructor for at indstille null=True og blank=True for at lette brugen af ​​automatisk genererede modeller. Da dette kan være nyttigt for nogle, er det her (dette er valgfrit og tvivlsomt):

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. Hvordan bruger man en fremmednøgle i sqlite?

  2. Sådan sammenlignes MySQL-databaseskemaer

  3. Sådan fungerer UNCOMPRESS() i MariaDB

  4. Hvordan opretter man postgres-udvidelse inde i containeren?