Skip to main content
 首页 » 编程设计

python之Django聚合和分组: code cleanliness problem

2024年08月12日33hnrainll

这是我遇到的一个小问题。


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),但我希望如此。