【问题标题】:Django annotate on float field is not working properly浮点字段上的 Django 注释无法正常工作
【发布时间】:2020-12-27 11:16:52
【问题描述】:

我正在使用 Django 2.2

我有以下模型结构


class Location(models.Model):
  name = models.CharField(max_length=200)
  country_name = models.CharField(max_length=200)
  latitude = models.FloatField(null=True, blank=True)
  longitude = models.FloatField(null=True, blank=True)


class TrackingData(models.Model):
  location = models.ForeignKey(Location)

我要选择纬度和相同纬度的个数

data = TrackingData.objects.filter(locaiton__latitude__isnull=False).values(latitude=F('location__latitude')).annotate(count=Count('latitude'))

我得到的结果是

<TrackingDataQuerySet [{'latitude': 28.6324823, 'count': 1}, {'latitude': 28.6324823, 'count': 1}, {'latitude': 28.6324823, 'count': 1}, {'latitude': 28.6324823, 'count': 1}, {'latitude': 28.6324823, 'count': 1}, {'latitude': 28.6324823, 'count': 1}, {'latitude': 28.6324823, 'count': 1}]>

所有纬度都相同,仍然得到单独的结果,相反,我想要

<TrackingDataQuerySet [{'latitude': 28.6324823, 'count': 7}]>

编辑 2

print(data.query)的输出

SELECT `tracking_location`.`latitude` AS `latitude`, COUNT(`tracking_location`.`latitude`) AS `count` FROM `tracking_trackingdata` INNER JOIN `tracking_location` ON (`tracking_trackingdata`.`location_id` = `tracking_location`.`id`) WHERE `tracking_location`.`address` IS NOT NULL GROUP BY `tracking_location`.`latitude`, `tracking_trackingdata`.`scan_time`, `tracking_trackingdata`.`created` ORDER BY `tracking_trackingdata`.`scan_time` DESC, `tracking_trackingdata`.`created` DESC

【问题讨论】:

  • 28.63.24.823 是一个有效的浮点值吗?
  • 抱歉,这是一个拼写错误。固定。
  • print(data.query) 的结果是什么?
  • 在问题中检查Edit 2 以获取print(data.query) 的输出

标签: django django-queryset django-annotate


【解决方案1】:
data = TrackingData.objects.filter(locaiton__latitude__isnull=False).values(latitude=F('location__latitude').distinct()).annotate(count=Count('latitude'))

【讨论】:

  • 它给出错误AttributeError: 'F' object has no attribute 'distinct'
猜你喜欢
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-02
  • 1970-01-01
  • 2022-01-19
  • 1970-01-01
  • 2012-01-31
相关资源
最近更新 更多