【问题标题】:Django JOIN. select data + select count姜戈加入。选择数据 + 选择计数
【发布时间】:2014-11-23 19:10:00
【问题描述】:

两种型号:

class KeywordCategory(models.Model):
    class Meta():
        db_table = 'keywords_category'
    category_name = models.CharField(max_length = 100)
...
class Keyword(models.Model):
    class Meta():
        db_table = 'keywords'
    keyword_category = models.ForeignKey(KeywordCategory)
    keyword_text     = models.CharField(max_length = 100)

我需要获取所有类别和其中的条目数。

SQL 语法:

SELECT keywords_category.*, COUNT(keywords.id) as count_keywords
FROM keywords_category
LEFT JOIN keywords ON keywords_category.id=keywords.keyword_category_id
GROUP by keywords_category.id

【问题讨论】:

    标签: python django join


    【解决方案1】:

    这将返回一个字典,键是keyword_categorytotal

    from django.db.models import Count
    
    kw_counts = Keyword.objects.all().values('keyword_category').annotate(
        total=Count('keyword_category')
    )
    

    【讨论】:

    • @qor1x .objects.values('keyword_category__category_name')
    【解决方案2】:

    获取所有类别:

    categories = KeywordCategory.objects.all()
    

    计算其中的条目:

    for category in categories:
        category.keyword_set.count()
    

    【讨论】:

      【解决方案3】:
      keywords = KeywordCategory.objects.all()
      
      print [(k, k.keyword_set.count()) for k in keywords]
      

      【讨论】:

        猜你喜欢
        • 2016-01-13
        • 2015-12-15
        • 1970-01-01
        • 2013-12-25
        • 2019-01-04
        • 1970-01-01
        • 1970-01-01
        • 2016-12-22
        • 2012-01-13
        相关资源
        最近更新 更多