Django ORM дублирует объекты в наборе запросов после упорядочивания по полю foreignkey
Я столкнулся с неожиданным поведением при сортировке объектов. Как только я сортирую по связанному полю модели, я получаю дубликаты. Краткое описание полей модели
models.py
class GoogleCreativeSpend(models.Model):
creative = models.ForeignKey(
'GoogleCreative',
on_delete=models.CASCADE,
)
spend = models.DecimalField()
class GoogleCreative(CreamCreative):
.....
Создайте несколько объектов:
>>> 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
Например, создав 3 объекта googlespend, я получаю 3 дубликата для googlecreative после сортировки.
Как отсортировать набор запросов на основе внешнего ключа без дубликатов
Я пробовал
queryset.distinct()
и
queryset.distinct('googlecreativespend__spend')
Но это не работает
Как это исправить?
Найти решение с помощью Avg
queryset = queryset.annotate(spend=Avg('googlecreativespend__spend'))
queryset.order_by('spend')