Вы должны добавить .order_by('track__isrc')
, чтобы заставить его «сворачиваться». Вы также должны рассчитывать на модель, а не на связанную модель:
Playlog.objects.values('track__isrc').annotate(
Count(<b>'pk'</b>, filter=Q(<b>duration__gte=10</b>)
)<b>.orer_by('track__isrc')</b>
При этом, если такое же значение isrc
означает, что это тот же продукт, et c. Лучше сделать модель и ForeignKey
для этого продукта, например:
class Product(models.Model):
isrc = mode.sCharField(max_length=128, unique=True)
# …
class Track(models.Model):
title = models.CharField(max_length=128)
isrc = models.ForeignKey(Product, on_delete=models.CASCADE)
# …
class Playlog(models.Model):
track = models.ForeignKey(Track, on_delete=models.CASCADE)
duration = models.IntegerField()
# …
Затем вы можете аннотировать Product
, например:
from django.db.models import Count, Q
Product.objects.annotate(
<b>total_play=Count('track__playlog', filter=Q(track__playlog__duration__gte=10))</b>
)