Mysql
 sql >> база данни >  >> RDS >> Mysql

Django ORM, Вмъкнете None datetime като 0 в MySQL

надграждайки решението на Seppo (което не работи за django 1.9.4 поради липса на connection.ops.value_to_db_datetime), накрая използвах персонализирано DateTimeField, както следва:

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

След това просто използвайте ZeroDateTimeField във вашите модели вместо DateTimeField.

работи като чаровница и се наложих да кажа на клиента да поправи mysql db;-)

РЕДАКТИРАНЕ:В крайна сметка замених конструктора, за да задам null=True и blank=True, за да улесня използването на автоматично генерирани модели. Тъй като това може да е полезно за някои, ето го (това е по избор и е под въпрос):

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Най-добри практики за съхраняване на информация за кредитна карта в базата данни

  2. MySQL заявката е болезнено бавна при големи данни

  3. Групиране на таблици в MySQL база данни

  4. Премахнете дубликатите в голяма MySql таблица

  5. Подредената входна стойност вмъква празен запис в mysql