首页 > 解决方案 > 如果相关项目的 COUNT 个,您如何编写 Django 查询条件?

问题描述

我正在使用 Django 和 Python 3.7。我有这两个模型,通过外键相互关联......

class Website(models.Model):
    objects = WebsiteManager()
    path = models.CharField(max_length=100)



class Article(models.Model):
    website = models.ForeignKey(Website, on_delete=models.CASCADE, related_name='articlesite')
    title = models.TextField(default='', null=False)
    url = models.TextField(default='', null=False)
    created_on = models.DateTimeField(db_index=True, default=datetime.now)

我想编写一个 Django 查询,它返回有 100 多篇文章与之相关的网站。在 PostGres 中,我可以编写这个查询

select w.id, count(*) FROM website w, article a where w.id = a.website_id group by w.id;

但我不清楚如何使用 Django 查询来做到这一点。如果是 COUNT 函数,我该如何编写查询条件?

编辑:

我修改了查询以添加条件...

qset = Website.objects.annotate(articlesite_count=Count('articlesite')).filter(
                         articlesite__edited_date__null=True,
                         articlesite_count__gte=100)

但现在这会导致错误

Unsupported lookup 'null' for DateTimeField or join on the field not permitted.

标签: pythondjangopython-3.xcountforeign-keys

解决方案


使用注释然后过滤

from django.db.models import Count

Website.objects.annotate(articlesite_count=Count('articlesite')).filter(articlesite_count__gte=100)

更新-1

from django.db.models import Count

Website.objects.filter(articlesite__edited_date__isnull=True).annotate(
    articlesite_count=Count('articlesite')).filter(
    articlesite_count__gte=100)

推荐阅读