如何筛选包含对象的ManyToMany

时间:2014-12-25 17:56:16

标签: python django django-models

我有这样的对象:

class Pencil(models.Model):
    color = models.CharField(max_length=20, unique=True)

class Box(models.Model):
   pencils = models.ManyToManyField(Pencil)
   name = models.CharField(max_length=50)

让我们说我有一支蓝色的铅笔:

pencil = Pencil.objects.create(color='blue')

然后我创建了一些Box类的实例。然后我按名称进行了一些过滤

boxes = Box.objects.filter(name__startswith='Big')

如何进一步过滤以仅获取名称从" Big"有一支蓝色铅笔?我不能做pencil.box_set.all()这样的事情,因为我已经在盒子上做了一些过滤。

2 个答案:

答案 0 :(得分:2)

您可以将多对多关系视为过滤中的一对多关系:

boxes = Box.objects.filter(name__startswith='Big', pencils__title='blue')

答案 1 :(得分:1)

这个怎么样?

boxes = Box.objects.filter(name__startswith='Big', pencils__in=[Pencil.objects.filter(color='blue')])