如何联合第二层ManyToManyFields?

问题描述 投票:0回答:1

我有以下型号:

class Tag(models.Model):
    name = models.CharField(max_length=50)

class Element(models.Model):
    tags = models.ManyToManyField('Tag')

class Category(models.Model):
    elements = models.ManyToManyField('Element')

    @property
    def tags(self):
        ...  # how can I do this?

如何获得出现在给定类别元素中的所有标签的并集?

我可以做这样的事情:

def tags(self):
    all_tags = Tag.objects.none()
    for element in self.elements.all():
        all_tags = all_tags | element.tags.all()
    return all_tags.distinct()

但是有没有办法直接在数据库级别执行此操作?

python django django-queryset manytomanyfield
1个回答
3
投票

使用双下划线符号遍历关系:

def tags(self):
    return Tag.objects.filter(element__category=self)
© www.soinside.com 2019 - 2024. All rights reserved.