2014-12-25 64 views
2

我有對象這樣的:如何爲多對多過濾包含對象

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') 

,然後我創建盒的一些實例類。然後我的名字

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

做一些過濾我怎樣才能進一步篩選得到的只有有名字從「大」開始,並且有藍色鉛筆盒?我不能做像pencil.box_set.all()之類的東西,因爲我已經對盒子做了一些過濾。

+0

不能這樣做以後盒過濾,如:'pencil.box_set。濾波器(name__startswith = '大')'?看起來最簡單。 –

+0

這只是一個例子。其實我有更復雜的過濾和不,不幸的是我不能這樣做。 –

回答

2

可以治療許多一對多的關係酷似一個一對多的關係,在過濾:

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

你測試過了嗎?我不知道它是否可行,因爲「鉛筆」是一個ManyRelatedManager – doniyor

+0

@ doniyor是的,我以前使用它。 – nima

1

這個呢?

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