繁体   English   中英

Django:外键字段的Select计数

[英]Django: Select count of foreign key field

我有以下型号:

class SystemTable(models.Model):
    id = models.FloatField(primary_key=True)
    system_name = models.CharField(max_length=50)
    system_desc = models.CharField(max_length=200, blank=True, null=True)
    system_url = models.CharField(max_length=2000, blank=True, null=True)
    status = models.ForeignKey(StatusLkp, models.DO_NOTHING, db_column='status',default=1)
    date_created = models.DateTimeField(default=datetime.now())
    objects = models.Manager()

    class Meta:
        app_label = 'system_table'
        managed = True
        db_table = 'system_table'


class SystemPagesTable(models.Model):
    id = models.FloatField(primary_key=True)
    system = models.ForeignKey(SystemTable, on_delete=models.CASCADE)
    page_name = models.CharField(max_length=200)
    page_link_xpath = models.CharField(max_length=2000)
    flag = models.FloatField(blank=True, null=True)
    status = models.ForeignKey(StatusLkp, models.DO_NOTHING, db_column='status',default=1)
    date_created = models.DateTimeField(default=datetime.now())
    objects = models.Manager()

    class Meta:
        app_label = 'system_pages_table'
        managed = True
        db_table = 'system_pages_table'

我想执行以下 SQL 查询:

select
  s.*,
  (select count(*) from page p where p.system_id = s.id) as NUM_OF_PAGES
from system s;

如何在不使用for循环的情况下使用 Django 的 ORM 执行上述查询?
我不想要基于一个系统的结果,我想检索所有系统及其页数。

尝试使用annotate

from django.db.models import Count
System.objects.annotate(num_pages=Count('page'))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM