от
Две из моих моделей имеют поле даты и поле даты и времени. Они существуют в одном файле 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 Ответы

0 голосов
от
Вы находите проблемы там, где их нет. Если вам нужно импортировать дату и время, просто сделайте это. Или, что еще лучше, импортируйте модуль 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 голосов
от
Вы должны импортировать дату и время в первую очередь.
import datetime
затем из вашего кода.
now = datetime.datetime.now()

m = SomeTime()

m.moment = now

m.save()

d = SomeDay()

d.date = now.date()

d.save()
    
0 голосов
от
Для моделей. DateTimeField использовать:
from django.utils.dateparse import parse_datetime

# set default date
default_date = parse_datetime('2000

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

from django.utils.timezone import now

filtered_sometime.update(date = now)
# with usage of time delta
filtered_sometime.update(date = now()   relativedelta(months=
    
0 голосов
от
Вы можете сделать это так.
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 голосов
от
Чтобы удалить предупреждение о времени выполнения, вы можете перейти к файлу settings.py и закомментировать «USE_TZ = True». Это всего лишь временное решение, мы хотели бы найти способ полностью избежать ошибок времени выполнения при рассмотрении международного использования     
Добро пожаловать на сайт ByNets, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...