这是我遇到的一个小问题。
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())
)
感谢您的帮助!!!
请您参考如下方法:
来自 Django docs :
from django.db.models import Count
Song.objects.values('author','author__instrument').annotate(Count("id"))
我不是 100% 确定它会起作用(现在是凌晨 2:20),但我希望如此。
