2013-02-26 38 views
1

假設我們有一個Driver模型,並且一個Driver可能擁有多輛汽車。我希望能夠過濾QuerySet,以便我可以看到所有駕駛特定車輛的司機。即:Django按可能在多對多字段中的值進行篩選

class Driver(models.Model): 
    primary_car = models.ForeignKey(Car, related_name='primary') 
    cars = models.ManyToMany(Car, related_name = 'all') 

    def save(self, force_insert=False, force_update=False, using=None, *args, **kwargs): 
     if self.primary_car not in self.cars.all(): 
      self.cars.add(self.primary_car) 
     super(Car, self).save(force_insert=False, force_update=False, using=None, *args, **kwargs) 

class Car(models.Models): 
    name = models.CharField(max_length=30) 

所以我們可以說我有50名司機,我知道有7 Yugos和2有Yugos作爲其主要的汽車。我如何搜索這些驅動程序?我認爲這需要不到2分鐘的時間才能找到答案,所以我可能錯過了一些基本的東西。

更新:我定的錯位save()方法

回答

2
from django.db.models import Q 

# drivers who have either have a "Yugo" as their primary car, 
# or have a relation to one 
yugo_drivers = Driver.objects.filter(Q(primary_car__name__iexact="Yugo") | 
            Q(cars__name__iexact="Yugo")) 

兩件事情,這將有助於你出去是:

+0

謝謝爲了答案!我幾乎不知道'Q-thingie'技術術語。所以你的回答對我來說特別有用。 – Cole 2013-02-26 18:58:22

+0

沒問題。 Q對象爲您提供了一種「OR」查找方式。 – Matt 2013-02-26 19:01:33

0
qs = Driver.objects.filter(Car_name=your_car.name) 
+0

不太明白 – Cole 2013-02-26 18:56:49

相關問題