Вот небольшая проблема, с которой я столкнулся.
3 очень простых модели:
>>> class Instrument(models.Model):
... name = models.CharField(max_length=100)
...
>>> class Musician(models.Model):
... instrument = models.ForeignKey(Instrument)
...
>>> class Song(models.Model):
... author = models.ForeignKey(Musician)
Я бы хотел посчитать количество песен, сгруппированных по названию инструмента и автору
У меня есть решения для этого, но я хотел бы знать, каков наилучший способ написать его в чистом django-orm, например, если бы код был чистым, лаконичным и многократно используемым (я имею в виду то, что вы можете легко повторить использовать для группировки по разным атрибутам). На самом деле я пытаюсь увидеть, действительно ли какой-то код, написанный мною для решения этой проблемы, действительно полезен, или я просто пропустил что-то большое ...
Вот первое решение, о котором я думаю:
results = []
for instrument_name in Instrument.objects.values_list('instrument', flat=True):
for musician in Musician.objects.filter(instrument__name=instrument_name):
results.append((
instrument_name,
musician,
Song.objects.filter(author=musician).count())
)
Спасибо за вашу помощь !!!