我有以下型号:
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()
但是有没有办法直接在数据库级别执行此操作?
使用双下划线符号遍历关系:
def tags(self):
return Tag.objects.filter(element__category=self)