【问题标题】:Get number of times an object is referenced in a ManyToManyField获取对象在 ManyToManyField 中被引用的次数
【发布时间】:2012-08-16 00:08:26
【问题描述】:

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

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

# ...

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

我如何知道Book 被收藏了多少次?

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • @mVChr:是的,它是最终出现在现场的那些隐藏属性之一,在搜索之前您可能没有注意到 :-)
    【解决方案2】:

    您需要将 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 中提取号码。

    【讨论】:

      猜你喜欢
      • 2021-10-30
      • 2021-04-04
      • 2017-05-22
      • 2021-04-17
      • 1970-01-01
      • 2010-12-13
      • 2013-01-25
      • 2011-04-15
      • 2014-05-14
      相关资源
      最近更新 更多