如何在Django中筛选关系项?
假设我有两个模型班。类别有一个名称和多个标记,标记有一个名称,可以是可见的,也可以是不可见的 编辑:假设我有一个类别列表,对于每个类别,我只想显示visible=True的标记,我应该如何继续如何在Django中筛选关系项?,django,django-models,django-managers,Django,Django Models,Django Managers,假设我有两个模型班。类别有一个名称和多个标记,标记有一个名称,可以是可见的,也可以是不可见的 编辑:假设我有一个类别列表,对于每个类别,我只想显示visible=True的标记,我应该如何继续 class Category(models.Model): name = models.CharField(max_length=255, unique=True) tags = models.ManyToManyField(Tag) class Ta
class Category(models.Model):
name = models.CharField(max_length=255, unique=True)
tags = models.ManyToManyField(Tag)
class Tag(models.Model):
name = models.CharField(max_length=255, unique=True)
visible = models.BooleanField(default=False)
大概是这样的:
category_list = Category.objects.all() #Or you can filter according to your choice
for c in category_list:
tagnames = c.tags.filter(visible=True).values("name")
print c.name, tagnames
您想知道可以获取结果的查询吗?如果是查询,则这可能是一个Category.objects.filter(tags=“True”)这是“丑陋的”,因为它将对您的数据库执行1+N次查询(其中N是所选类别的数量)。为了避免这种情况,请执行category_list=category.objects.prefetch_相关('tags')。这将完成第1行(1db查询)中的所有工作,然后for循环将只读取python变量。