sql >> Database >  >> RDS >> Mysql

Django ORM, voeg geen datetime in als 0 in MySQL

voortbouwend op de oplossing van Seppo (die niet werkte voor django 1.9.4 vanwege het ontbreken van connection.ops.value_to_db_datetime), gebruikte ik uiteindelijk een aangepast DateTimeField als volgt:

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

Gebruik dan gewoon ZeroDateTimeField in uw modellen in plaats van DateTimeField.

werkt als een tierelier en ik moest de klant vertellen dat hij zijn mysql-database moest repareren;-)

EDIT:Ik heb uiteindelijk de constructor overschreven om null=True en blank=True in te stellen om het gebruik van automatisch gegenereerde modellen te vergemakkelijken. Aangezien dit voor sommigen nuttig kan zijn, is het hier (dit is optioneel en twijfelachtig):

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. Is het mogelijk om de ongeldige waarde in MySQL te vangen wanneer ik een externe sleutelbeperkingsfout krijg?

  2. Hoe een bytearray (afbeeldingsgegevens) van en naar een SQLite-database opslaan en ophalen?

  3. python pip install psycopg2 installatiefout

  4. Welk VERZAMELEN moet ik instellen om alle mogelijke talen te gebruiken?