2

我有以下型号:

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

在某个视图中,我想创建一个所有TopicLabels 的列表,它们至少有一个连接(即hasTopics返回的位置true)。

AFAIK 在 Django 中不可能在filter表达式中使用实例方法(即TopicLabel.objects.filter(TopicLabel.hasTopics).order_by('order')不可能的)。

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

4

1 回答 1

4

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

TopicLabel.objects.filter(connection_label__isnull=False)

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

于 2013-09-24T18:10:06.480 回答