ManyToMany 表中记录数的简单计数

Posted

技术标签:

【中文标题】ManyToMany 表中记录数的简单计数【英文标题】:Simple count of number of records in ManyToMany table 【发布时间】:2011-10-02 23:36:29 【问题描述】:
class Author(models.Model):
   name = models.CharField(max_length=100)
   age = models.IntegerField()
   friends = models.ManyToManyField('self', blank=True)

class Publisher(models.Model):
   name = models.CharField(max_length=300)
   num_awards = models.IntegerField()

class Book(models.Model):
   isbn = models.CharField(max_length=9)
   name = models.CharField(max_length=300)
   pages = models.IntegerField()
   price = models.DecimalField(max_digits=10, decimal_places=2)
   rating = models.FloatField()
   authors = models.ManyToManyField(Author)
   publisher = models.ForeignKey(Publisher)
   pubdate = models.DateField()

class Store(models.Model):
   name = models.CharField(max_length=300)
   books = models.ManyToManyField(Book)

我认为我遗漏了一些非常明显的东西,但是如何计算在这个多对多表 authors = models.ManyToManyField(Author) 中创建的记录数?

【问题讨论】:

【参考方案1】:

查看the docs,很简单:

b = Book.objects.all()[0]
b.authors.count()

更新:

最初的问题是询问数据库中所有作者的列表,而不是查找每本书的作者列表。

获取数据库中所有作者的列表:

Author.objects.count() ## Returns an integer.

【讨论】:

我向你保证我正在疯狂地搜索。所有示例都给出了过滤查询。出于某种原因,即使在您嵌入的链接中,[0] 部分也不会出现在任何地方。 [0] 只是选择查询集中的第一个 Book。同说:Book.objects.get(pk=1)(假设第一个Book的主键为1)。 所以如果我做Book.objects.get(pk=1),在我的计数中我会在b = Book.objects.all()[0] 得到相同的结果? 我不明白为什么我需要选择第一本书才能对可能包含许多其他书籍的作者字段进行计数? 是的。这与使用列表完全相同。为简洁起见,我只是从该列表中删除了第一项。

以上是关于ManyToMany 表中记录数的简单计数的主要内容,如果未能解决你的问题,请参考以下文章

将记录计数插入到不同的表中

查找关联计数大于零的所有记录

Spring MVC:@ManyToMany DAO?

Doctrine ManyToMany 自引用双向 - 父级未更新

Hibernate、Spring 框架和多对多

@ManyToMany 表之间的关系