【问题标题】:Whats the correct format for django dateTime in models?模型中 django dateTime 的正确格式是什么?
【发布时间】:2019-09-13 14:42:24
【问题描述】:

我是 django 的新手,我正在创建我的第一个项目。我创建了一个应用程序,在该模型中我定义了一个 postgres 数据时间字段,但是在运行 migrate 命令时我总是得到这个字段的错误。

我在 models.py 中为 datetime 字段使用了以下值,但什么也没发生

created=models.DateTimeField(default=timezone.now)
created=models.DateTimeField(default='', blank=True, null=True)
created=models.DateTimeField(blank=True, null=True)
created=models.DateTimeField(default='0000-00-00 00:00:00', blank=True, null=True)

在我的 settings.py 中

LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True

我的模型.py

from django.db import models
from django.utils import timezone
# from django.contrib.auth.models import User

# Create your models here.
class Operator(models.Model):
operator_code=models.CharField(unique=True, max_length=20)
operator_name=models.CharField(max_length=60)
operator_type=models.CharField(max_length=60)
short_code=models.CharField(max_length=60)
apiworld_code=models.CharField(max_length=20)
apiworld_operatortype=models.CharField(max_length=20)
active_api_id=models.IntegerField(default=1)
ospl_commission=models.DecimalField(default=0.00, max_digits=11, decimal_places=2)
apiworld_commission=models.DecimalField(default=0.00, max_digits=11, decimal_places=2)
image=models.CharField(max_length=100)
status=models.SmallIntegerField(default=1)
updated=models.DateTimeField(default=timezone.now)
created=models.DateTimeField(default=timezone.now)

def __str__(self):
    return self.operator_code

当我运行“python manage.py migrate”时出现以下错误如何删除它

'django.core.exceptions.ValidationError: ["'0000-00-00 00:00:00' 值具有正确的格式 (YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ ]) 但它是无效的日期/时间。"]'

【问题讨论】:

    标签: python django postgresql pycharm


    【解决方案1】:

    为了回答您的问题,Django 中 DateTimeField 的格式在默认设置中定义,如下所述:https://docs.djangoproject.com/en/2.2/ref/settings/#datetime-input-formats

    此时它默认为以下,但显然可能会因您使用的 Django 版本而有所不同:

    [
        '%Y-%m-%d %H:%M:%S',     # '2006-10-25 14:30:59'
        '%Y-%m-%d %H:%M:%S.%f',  # '2006-10-25 14:30:59.000200'
        '%Y-%m-%d %H:%M',        # '2006-10-25 14:30'
        '%Y-%m-%d',              # '2006-10-25'
        '%m/%d/%Y %H:%M:%S',     # '10/25/2006 14:30:59'
        '%m/%d/%Y %H:%M:%S.%f',  # '10/25/2006 14:30:59.000200'
        '%m/%d/%Y %H:%M',        # '10/25/2006 14:30'
        '%m/%d/%Y',              # '10/25/2006'
        '%m/%d/%y %H:%M:%S',     # '10/25/06 14:30:59'
        '%m/%d/%y %H:%M:%S.%f',  # '10/25/06 14:30:59.000200'
        '%m/%d/%y %H:%M',        # '10/25/06 14:30'
        '%m/%d/%y',              # '10/25/06'
    ]
    

    但是,查看您的代码,我想您想知道“在 Django 中创建默认 DateTime 值的正确方法是什么”的答案。

    答案取决于您希望该默认值是什么。如果您希望值为null,那么这很容易。

    myfield = models.DateTimeField(null=True, blank=True, default=None)
    

    如果您尝试创建 created_atupdated_at 字段,那么您想分别使用 auto_now_addauto_now kwargs,这将自动填写模型实例创建时间的字段,并且更新了。

    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    

    【讨论】:

    • 我根据你创建了模型,但也得到了同样的错误。然后我从该表中删除了带有 app="my-app-name" 的记录(从 django_migrations where app = "app-name" 中删除)。删除我的迁移文件夹并运行 python manage.py makemigration my-app-name,然后运行 ​​python manage.py migrate my-app-name。然后这个运行没有错误。谢谢
    • 我有一个关于存储在 mysql 中的日期时间格式的问题,如果我们想使用 model_fields(Django 中的默认 site_packages 文件夹)文件存储 'YYYY-mm-dd hh:mm: ss' 格式site_packages 怎么实现?
    【解决方案2】:

    我在更新我的 model.py 时遇到了同样的格式错误

    我给你看我的场景,也许它会有所帮助。 所以我有一个现有的类,想添加这一行:

    time = models.TimeField()

    比我做的迁移和现在重要的部分

    Please select a fix:
    1) Provide a one-off default now (will be set on all existing rows with a null value
    for this column)
    2) Quit, and let me add a default in models.py
    

    选择 1) 并输入 timezone.now 以设置默认值

    迁移,你得到了它

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-24
      • 1970-01-01
      • 2021-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多