比方說,我的模型是這樣的:增量計數和計算
class Publisher(models.Model):
name = models.CharField(max_length=30)
code = models.SmallIntegerField(unique=True)
class Book(models.Model):
date = models.DateField(auto_now_add=True)
publisher = models.ForeignKey(Publisher)
hardback = models.BooleanField()
large_print = models.BooleanField()
對於給定的日期範圍,我希望能夠輸出CSV其具有的每出版商書總數,每個布爾字段的百分比。
如:
Publisher-code Total %hardback %large_print:
123 120 32 10
等
(一)到目前爲止,我的工作與每個出版商的書籍總數生成一個查詢集
totalset = Publisher.objects.all()
d1 = dict(totalset.annotate(total_books=Count('publisher')).values_list('code','total_books'))
然後,視圖獲取每個布爾字段的字典轉換查詢集,例如
d2 = dict(totalset.filter(book__hardback=True).annotate(hardc=Count('book__hardback')).values_list('code','hardc'))
然後得到了基於兩套
d3 = {k: round(float(d2[k])*100/d1[k]) for k in d1.viewkeys() & d2.viewkeys()}
我是新來這一切的交集計算百分比一個新的字典,所以我覺得這是非常令人費解。有沒有更直接的方法??! (b)如果可以在數據庫中做到這一點(例如使用某種模型屬性),這是否比在Python中做數據庫變得更加高效?
非常感謝