Как установить поле даты по умолчанию и перезаписать его, а также установить поле даты и времени по умолчанию и перезаписать его, все в том же models.py - PullRequest
0 голосов
/ 04 июля 2019

Две из моих моделей имеют поле даты и поле даты и времени.Они существуют в одном файле models.py, и я хотел бы установить их по умолчанию при добавлении в базу данных / в существование.Что еще более важно, я также хотел бы перезаписать эти поля для генерации моделей для их тестирования.

После некоторых исследований я начал использовать часовой пояс pytz и django.utils.Проблема, с которой я сталкиваюсь, - это ошибки времени выполнения, когда я пытаюсь перезаписать их, используя встроенный в python datetime (используя такие вещи, как timedelta и т. Д.).Поэтому я попытался преобразовать pytz.utc.localize (), но он пожаловался, что объекты datetime, которые я передал, были не наивными, но когда я возвращаюсь к своей исходной версии, он все равно выдает ошибку времени выполнения.Я нашел много способов преодолеть это, в основном используя такие вещи, как date = models.DateField(_("Date"), default=datetime.date.today), что требует import datetime, но проблема здесь в том, что я также хочу использовать DateTimeField, а теперь просто DateField.Поэтому я бы использовал date = models.DateField(_("Date"), default=date.today), но для этого требуется from datetime import date.Конфликт импорта, и все это мешает мне

class SomeTime(models.Model):
    moment = models.DateTimeField(default=???, editable=True, blank=True)

class SomeDay(models.Model):
    date = models.DateField(default=???, editable=True, blank=True)

Я хотел бы пойти

m = SomeTime()

m.moment = #some datetime that I set, It should not throw a runtime error

m.save()

d = SomeDay()

d.date = #some date that I set, It should not throw a runtime error

d.save()

Помимо простого создания этих объектов, SomeTime должен сохранять текущую дату / время до моментаи SomeDay должны сохранить текущую дату

Ответы [ 5 ]

1 голос
/ 04 июля 2019

Вы находите проблемы там, где их нет. Если вам нужно импортировать дату и время, просто сделайте это. Или, что еще лучше, импортируйте модуль datetime и получите доступ к обоим классам внутри него.

import datetime


class SomeTime(models.Model):
    moment = models.DateTimeField(default=datetime.datetime.now, editable=True, blank=True)

class SomeDay(models.Model):
    date = models.DateField(default=datetime.date.today, editable=True, blank=True)

Или, если хотите, наберите from datetime.import datetime, date, затем default=datetime.now и default=date.today.

0 голосов
/ 06 июля 2019

Чтобы удалить предупреждение о времени выполнения, вы можете перейти к файлу settings.py и закомментировать «USE_TZ = True». Это всего лишь временное решение, мы хотели бы найти способ полностью избежать ошибок времени выполнения при рассмотрении международного использования

0 голосов
/ 04 июля 2019

Вы можете сделать это так.

import datetime
class SomeTime(models.Model):
        moment = models.DateTimeField(default=datetime.datetime.now, editable=True, blank=True)

    class SomeDay(models.Model):
        date = models.DateField(default=datetime.date.today, editable=True, blank=True)
0 голосов
/ 04 июля 2019

Для моделей. Использование DateTimeField:

from django.utils.dateparse import parse_datetime

# set default date
default_date = parse_datetime('2000-01-01T00:00:00')

class SomeTime(models.Model):
    date = models.DateTimeField(default=default_date)

Вы можете обновить это поле с помощью:

from django.utils.timezone import now

filtered_sometime.update(date = now)
# with usage of time delta
filtered_sometime.update(date = now() + relativedelta(months=-1))
0 голосов
/ 04 июля 2019

Вам необходимо импортировать дату и время.

import datetime

тогда из вашего кода.

now = datetime.datetime.now()

m = SomeTime()

m.moment = now

m.save()

d = SomeDay()

d.date = now.date()

d.save()
...