-1

I'm using Django 2.2

I have the following model structure


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)

I want to select latitude and count of the number of same latitudes

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

I'm getting the results as

<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}]>

All latitudes are same, still getting separate results, instead, I want

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

Edit 2

Output of 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
Anuj TBE
  • 9,198
  • 27
  • 136
  • 285

1 Answers1

0
data = TrackingData.objects.filter(locaiton__latitude__isnull=False).values(latitude=F('location__latitude').distinct()).annotate(count=Count('latitude'))
Surya Pratap Rana
  • 423
  • 1
  • 4
  • 9