Python 带有聚合函数的Django查询

Python 带有聚合函数的Django查询,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.o

我有以下型号:

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
在某个视图中,我想创建一个包含所有TopicLabel的列表,其中至少有一个连接I。E其中hastTopics返回true

在Django中,不可能在filter表达式i中使用实例方法。E类似TopicLabel.objects.filterTopicLabel.hasTopics.order的东西是不可能的


什么是Django风格的正确方法来实现这种查询,最好是独立于数据库的?

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


对于确实需要聚合的情况,可以按中所述对注释进行筛选。

对于此特定情况,根本不需要聚合函数。使用isnull筛选器:


对于确实需要聚合的情况,可以按中所述对注释进行筛选。

不要使用计数来检查是否存在。使用queryset.exists insted。这对于您的数据库来说要容易得多。计数可能是有害的。现在确实可以回答您的问题,但是如果您的TopicLabelConnection模型纯粹是为了连接其他两个模型而存在,那么您可能可以使用Django ManyToMany字段,让它为您生成和管理表。不要使用计数来检查是否存在。使用queryset.exists insted。这对于您的数据库来说要容易得多。计数可能是有害的。现在确实可以回答您的问题,但是如果您的TopicLabelConnection模型纯粹是为了连接其他两个模型而存在的,那么您可能可以使用Django ManyToMany字段,让它为您生成和管理表。
TopicLabel.objects.filter(connection_label__isnull=False)