python - 具有聚合函数的 Django 查询

标签 python django

我有以下模型:

class TopicLabel(models.Model):
    name = models.CharField(max_length=256)
    order = models.IntegerField(null=True, blank=True)
    def __unicode__(self):
        return self.name

    def hasTopics():
        return TopicLabelConnection.objects.filter(labelId=self.id).count() > 0

class TopicLabelConnection(models.Model):
    topicId = models.ForeignKey(Topic, related_name='connection_topic')
    labelId = models.ForeignKey(TopicLabel, related_name='connection_label')

    def __unicode__(self):
        return self.labelId.name + ' / ' + self.topicId.title

在某个 View 中,我想创建一个包含所有 TopicLabel 的列表,它们至少有一个连接(即 hasTopics 返回 true).

据我所知,在 Django 中不可能在 filter 表达式中使用实例方法(即类似于 TopicLabel.objects.filter(TopicLabel.hasTopics).order_by('order') 是不可能的)。

实现此类查询的正确(Django 风格)方法是什么(最好是独立于数据库的)?

最佳答案

对于这种特定情况,您根本不需要聚合函数。使用 isnull 过滤器:

TopicLabel.objects.filter(connection_label__isnull=False)

对于确实需要聚合的情况,您可以按照 aggregation documentation 中的说明过滤注释.

关于python - 具有聚合函数的 Django 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18988194/

相关文章:

python - 不使用本地主机连接 MySQL

python - 将数据和标签拆分为 pandas 数据框中的两个单独的列

python - 使用 Django 进行站点范围的缓存 - 注销时密码保护页面的问题

Python-MySQLdb问题: wrong ELF class: ELFCLASS32

jquery - 当 jquery ajax 发布带有 processData=false 的 formdata 时,csrf_token 的 Django 响应 403 被拒绝

python - Django 和 App Engine - 2012 更新

python - DJANGO 翻译 - 使用 django-datatrans 翻译包括 "slugs"在内的模型

python - 我如何在没有 mysql 服务器的情况下管理小型数据库?

Python tkinter 按钮绑定(bind)

python - 使用 python 从多个列表中嵌套字典