获取ManyToManyField中引用对象的次数

时间:2012-08-16 00:08:26

标签: python django django-models many-to-many

我有一些看起来像这样的模型:

class UserProfile(models.Model):
    user = models.OneToOneField(User)
    favorite_books = models.ManyToManyField(Book)

# ...

class Book(models.Model):
    title = models.CharField(max_length=255)

如何判断Book被收藏的次数?

2 个答案:

答案 0 :(得分:3)

您可以直接使用ORM查询"through"表:

UserProfile.favorite_books.through.objects.filter(book_id=book.id).count()

答案 1 :(得分:0)

您需要将appname_*替换为数据库中M2M表的名称,但您可以执行以下操作:

from django.db import connections

cursor = connections['default'].cursor()
cursor.execute("""
    SELECT count(*) FROM appname_userprofile_books
    WHERE book_id = {book_id};
""".format(book_id=book_id))
favorited_count_list = cursor.fetchall()

然后,您可以从favorited_count_list中提取数字。

相关问题