Как установить TimeField в одиночку 00:00:00: в Django - PullRequest
0 голосов
/ 26 сентября 2018

Здесь я упомянул My model.py в этом поле даты по умолчанию. Я хочу назначить часовой пояс как 00:00:00, поэтому, пожалуйста, помогите мне сделать это.

Models.py

class Dummy(models.Model):
    name = models.CharField(max_length=100)
    date = models.DateTimeField(null=True,auto_now_add=True)

Ожидаемый результат, например

{
    "id": 1,
    "name": "xxxx",
    "date": "2018-09-26T00:00:00Z"
}

Фактический результат

{
    "id": 1,
    "name": "xxxx",
    "date": "2018-09-26T05:52:26.626604Z"
}

Ответы [ 4 ]

0 голосов
/ 26 сентября 2018

Вы можете удалить time часть объекта datetime, используя метод .replace():

self.date = self.date.replace(hour=0, minute=0, second=0, microsecond=0)

Это приведет к:

datetime.datetime(2018, 9, 26, 0, 0)
0 голосов
/ 26 сентября 2018

Похоже, вы вообще не хотите компонент времени;не имеет смысла хранить его, если вы намерены обнулять его во всех случаях.

Сохраните только дату, а в сериализаторе используйте дату для создания экземпляра datetime.

from datetime import date, datetime


# Where t would normally be a date from your model...
t = date.today()
print(datetime(t.year, t.month, t.day).isoformat())
# 2018-09-26T00:00:00

Вы не предоставили нам информацию о том, как вы генерируете этот JSON, но если вы используете встроенную сериализацию Django, вы можете написать собственный кодер для обработки перевода дат в ноль.время и время таким образом.

0 голосов
/ 26 сентября 2018

Из документов Django для Field.default:

Значение по умолчанию для поля.Это может быть значение или вызываемый объект.Если он вызывается, он будет вызываться каждый раз, когда создается новый объект.

Так сделайте это:

from datetime import datetime, timedelta

def default_start_time():
    now = datetime.now()
    start_time = now.replace(hour=00, minute=0, second=0, microsecond=0)
    return start_time 

class Dummy(models.Model):
    name = models.CharField(max_length=100)
    date = models.DateTimeField(null=True,auto_now_add=True,default=default_start_time)
0 голосов
/ 26 сентября 2018

Используйте DateField вместо DateTimeField.

...