Я фильтрую запрос Django, чтобы получить время обновления через час. Модель имеет DateTimeField.
это для получения всего времени обновления, которое обновляется один час назад, я пытался использовать datetime.now() - timedelta (hours = 1) и использовать диапазон (min, max)
представления, которые я использую (generics.ListAPIView):
модели
updatetime = models.DateTimeField(blank=True, null=True)
onehours = datetime.now() - timedelta(hours=1)
queryset = TbDevice.objects.filter(updatetime__gte=onehours).order_by('-updatetime')
эти коды должны возвращать время обновления за последний час назад, например, в 14:00 должны возвращать только последний час, но на самом деле все данные, которые имеют тот же день, появились
я проверил, изменив значение updatetime вручную, только данные больше 06:48:00 появились, когда последнее время в 14:57:00
есть ли влияние на них обоих? другой тип Время обновления в моей БДв почтальоне
using timezone
Используя форму часового пояса django.utils, результатс моим текущим временем
класс TbDevice (models.Model): псевдоним = models.CharField (max_length = 32, пусто = True, null = True) электронная почта = models.CharField (max_length = 64, пусто = True, null = True) status = models.CharField ( max_length=64, пусто=Истина, ноль=Истина) createtime = models.DateTimeField(blank=True, null=True) updatetime = models.DateTimeField(blank=True, null=True) класс Мета: управляемый = False db_table = 'устройство 'представления, которые я использую (generics.ListAPIView):
должен был обновить вопрос. Это для всех, не только для меня
У вас есть USE_TZ=True
в настройках??
в моих settings.py USE_TZ=True
уже
Попался!!
вы находитесь в Indonesia
(GMT+7). Ваша БД (с использованием системного часового пояса) и django (с использованием часового пояса UTC) имеют разницу во времени 7 часов.
попробуйте свой запрос, используя формат даты и времени с учетом часового пояса.
from django.utils import timezone
one_h_ago = timezone.now()-timezone.timedelta(hours=1)
queryset = TbDevice.object.filter(updatetime__gte=one_h_ago)
В почтальоне вы получаете "updatetime": "2019-05-28T22:33:00+7:00"
Т в ответе, который говорит нам, что вы включили поддержку часового пояса. У вас есть наборы settings.USE_TZ
и settings.TIME_ZONE
.
Надеюсь это поможет. Дайте знать, если у вас появятся вопросы.
Рад помочь :)
Это для твоего познания:
Из комментариев я вижу вашу модель как:
class TbDevice(models.Model):
nickname = models.CharField(max_length=32, blank=True, null=True)
email = models.CharField(max_length=64, blank=True, null=True)
status = models.CharField(max_length=64, blank=True, null=True)
createtime = models.DateTimeField(blank=True, null=True)
updatetime = models.DateTimeField(blank=True, null=True)
class Meta:
managed = False
db_table = 'device'
для createtime
и updatetime
вы должны использовать
createtime = models.DateTimeField(auto_now_add=True)
updatetime = models.DateTimeField(auto_now=True)
проверьте auto_now и auto_now_add для получения дополнительной информации.
спасибо, на самом деле я пытался использовать timezone
, но результаты такие же, как и раньше, я обновил вопрос
@FajrullahSejatiEvat означает, что предложенный ответ не сработал?
согласно вашему объяснению выше, я нашел подсказку, когда я установил параметр в 2019-05-29 18:53:00, а затем появились данные, которые updatetime gte 2019-05-29 11:53:00 появились ... это значит, updatetime - через 7 часов
@FajrullahSejatiEvat Звучит как быстрое решение, но не точное решение. Как вы сохраняете свои createtime
и updatetime
? Вы пробовали то, что предлагается в ответе (auto_now
и auto_now_add
)?
мои модели, используя ваше предложение
Это выглядит хорошо. Можете ли вы опубликовать свою модель и представление, в котором вы реализовали этот код. Может быть, есть что-то еще где-то