Корректно Django запрос даты и времени для данных / объекта через час - PullRequest
0 голосов
/ 28 мая 2019

Я фильтрую запрос Django для получения времени обновления в последний час с этого момента, у модели есть DateTimeField.

это для получения всего времени обновления, которое обновляет один час назад, я пытался использовать datetime.now () - timedelta (часы = 1) и использование диапазона (мин., макс.)

просмотров, которые я использую (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')

этот код должен возвращать время обновления с последнего часа назад, например, в 2 часа дня должен возвращаться только последний час, но на самом деле все данные, которые имели тот же день, показалиup

я проверил, изменив значение update вручную, только данные больше 06:48:00 появились, когда в последнее время в 14:57:00

влияют ли они оба?другой тип Время обновления в моей БД в Почтальоне

using timezone При использовании формы часового пояса django.utils результат равен с моимтекущее время

1 Ответ

0 голосов
/ 28 мая 2019

Попался !!

вы находитесь в Indonesia (GMT + 7). Ваша БД (с использованием системного часового пояса) и django (с использованием часового пояса UTC) имеют разницу в 7 часов.

попробуйте выполнить запрос в формате datetime с учетом часового пояса.

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" T в ответе говорит нам, что вы включили поддержку часового пояса. У вас есть 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 для получения дополнительной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...