Django DateTimeField received a naive datetime
我遇到的问题是我似乎无法根据时间戳(即日期和小时)过滤我的数据。
我的模型如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | # 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' |
我的看法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 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 received a naive
datetime (2017-01-15 06:00:00) while time zone support is active.
RuntimeWarning)
但是,当我使用
ValueError: Not naive datetime (tzinfo is already set)
我的数据库包含如下所示的数据:
出于某种原因,第一个选项返回结果,但它完全忽略了时间。
我该如何解决?
问题是因为Python无法解释我存储在数据库中的格式。 有两种解决方案:
- 在Django中使用字符串转换编写原始查询
- 以不同的格式存储日期时间字段
我选择了2,因为它是一个已经自动化的脚本,用于检索数据,现在它工作正常。