Django ORM dublicate objects in queryset after order_by by foreignkey field

I have encountered some unexpected sorting behaviour with objects. As soon as I sort by the related model field, I get duplicates. A short description of the model fields

models.py

class GoogleCreativeSpend(models.Model):
    creative = models.ForeignKey(
        'GoogleCreative',
        on_delete=models.CASCADE,
    )
    spend = models.DecimalField()

class GoogleCreative(CreamCreative):
     .....

Create some objects:

>>> creative = GoogleCreative.objects.get(name='gs_video1031v1')
>>> spend = GoogleCreativeSpend(creative=creative, spend=100,)
>>> spend.save()
>>> spend = GoogleCreativeSpend(creative=creative, spend=1100,)
>>> spend.save()
>>> spend = GoogleCreativeSpend(creative=creative, spend=1,)
>>> spend.save()

views.py

queryset = GoogleCreative.objects.all()
queryset.order_by('googlecreativespend__spend')
for i in queryset:     
    if i.name == 'gs_video1031v1':
        print(i.name)  


| gs_video1031v1
| gs_video1031v1
| gs_video1031v1

I.e. by creating 3 googlespend objects I get 3 duplicates for googlecreative after sorting.

According to How to sort queryset based on foreign key with no duplicates
I tryied

queryset.distinct()

and

queryset.distinct('googlecreativespend__spend') 

But it doesn't work

How to fix it ?

Finde the solution using Avg

queryset = queryset.annotate(spend=Avg('googlecreativespend__spend'))
queryset.order_by('spend')
Back to Top