Django DateTimeField получил наивное свидание - PullRequest
0 голосов
/ 15 марта 2019

Проблема, с которой я столкнулся, заключается в том, что я не могу отфильтровать свои данные на основе отметки времени, то есть даты и час .

Моя модель выглядит следующим образом:

# Create your models here.
class HourlyTick(models.Model):
    id = models.IntegerField(primary_key=True)
    timestamp = models.DateTimeField(blank=True, null=True)
    symbol = models.TextField(blank=True, null=True)
    open = models.IntegerField(blank=True, null=True)
    high = models.IntegerField(blank=True, null=True)
    low = models.IntegerField(blank=True, null=True)
    close = models.IntegerField(blank=True, null=True)
    trades = models.IntegerField(blank=True, null=True)
    volume = models.IntegerField(blank=True, null=True)
    vwap = models.FloatField(blank=True, null=True)

    class Meta:
        managed = False
        db_table = 'xbtusd_hourly'

Мой взгляд:

class HourlyTickList(ListAPIView):
    serializer_class = HourlyTickSerializer
    def get(self, request):
        start = request.GET.get('start', None)
        end = request.GET.get('end', None)
        tz = pytz.timezone("Europe/Paris")

        start_dt = datetime.datetime.fromtimestamp(int(start) / 1000, tz)
        end_dt = datetime.datetime.fromtimestamp(int(end) / 1000, tz)

        qs = HourlyTick.objects.filter(timestamp__range = (start_dt, end_dt))
        rawData = serializers.serialize('python', qs)
        fields = [d['fields'] for d in rawData]
        fieldsJson = json.dumps(fields, indent=4, sort_keys=True, default=str)

        return HttpResponse(fieldsJson, content_type='application/json')

Я получаю сообщение:

RuntimeWarning:DateTimeField HourlyTick.timestamp получил наивное время даты (2017-01-15 06:00:00), когда активна поддержка часового пояса.
RuntimeWarning)

Однако, когда я использую make_aware дляисправить эту ошибку, я получаю сообщение об ошибке:

ValueError: Не наивная дата-время (tzinfo уже установлена)

Моя база данных содержит данные, которые выглядят так:

2017-01-06T12:00:00.000Z

По какой-то причине первый вариант возвращает результаты, но он полностью игнорирует время.

Как это исправить?

1 Ответ

0 голосов
/ 16 марта 2019

Проблема заключалась в том, что Python не мог интерпретировать формат, который я сохранил в базе данных.Возможны два решения:

  • Написание необработанного запроса с преобразованием строки в Django
  • Сохранение полей даты и времени в другом формате

Я выбрал вариант 2поскольку это был уже автоматизированный скрипт для извлечения данных, и теперь он работает нормально.

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