class Author(models.Model):
name = models.CharField(max_length=100)
class Book(models.Model):
isbn = models.CharField(max_length=9)
name = models.CharField(max_length=300)
authors = models.ManyToManyField(Author, through='BookAuthor')
class BookAuthor(models.Model):
book = models.ForeignKey('Book', on_delete=models.CASCADE)
author = models.ForeignKey('Author', on_delete=models.CASCADE)
position = models.IntegerField()
在上面的模型中,我记录了作者姓名的位置
对于给定的书(参见position
表中的BookAuthor
字段),即想象" Paulo Coelho"是第一作者"在Book X上,"第二作者"在Y书上,"第三作者"在书Z.
对于每个作者,我想创建一个直方图,其中每个 直方图bin计算作者姓名出现在" ith"所有书籍的位置。例如:
AuthorName, No1stAuth, No2ndAuth, No3rdAuth
--------------------------------------------
Paulo Coelho, 3, 1, 1
Mario Vargas Llosa, 4, 2, 0
这意味着Paulo Coelho作为第一作者出现3倍,作为第二作者出现1倍,作为第三作者出现1倍。 Mario Vargas Llosa作为第一作者出现了4倍,作为第二作者出现了2倍,作为第三作者出现了0x。你可以假设,每本书最多有5位作者。
答案 0 :(得分:0)
我猜您可以通过以下方式获取包含所需数据的字典:
result = BookAuthor.objects.values('author','position ')
.annotate(count=Count('id'))
然后你可以将这个字典转换回一个列表。