Какой правильный формат для Django DateTime в моделях? - PullRequest
0 голосов
/ 24 апреля 2019

Я новичок в Django и создаю свой первый проект.Я создал одно приложение, в модели которого я определяю одно поле времени данных postgres, но всегда получаю ошибку для этого поля при запуске команды migrate.

Я использовал приведенное ниже значение для поля даты и времени в models.py, но ничего не произошло

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

my models.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 'имеет правильный формат (ГГГГ-ММ-ДД ЧЧ: ММ [: ss [.uuuuuu]]] [TZ]), но это недопустимая дата / время. "] '

1 Ответ

3 голосов
/ 24 апреля 2019

Чтобы ответить на ваш вопрос, формат DateTimeField в Django определен в настройках по умолчанию, как описано здесь: 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'
]

Однако, глядя на ваш код, я думаю, что вы хотите знать ответ на вопрос «как правильно создать значение DateTime по умолчанию в Django».

Ответ на этот вопрос зависит от того, что вы хотите, чтобы это значение по умолчанию. Если вы хотите, чтобы значение было null, тогда это просто.

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

Если вы пытаетесь создать поля created_at и updated_at, то вы хотите использовать auto_now_add и auto_now kwargs соответственно, которые будут автоматически заполнять поля во время создания экземпляра модели и обновлен.

created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...