2017-05-31 89 views
0

我有这些模型:Django的查询集与多个M2M领域

class Doctor(models.Model): 
    coopsort = ManyToManyField('Cooperation', related_name='coopsort') 
    name = models.CharField(...) 

class Cooperation(models.Model): 
    doctor = models.ManyToManyField(Doctor, blank=True, verbose_name=u"Doc") 

我如何查询使用coopsort M2M领域的医生给出的所有项目合作?

Cooperation.objects.filter... <pls advise here> 
+0

为什么你需要在这两个模型manytomany? –

+0

都有不同的功能原因。 – caliph

回答

0

比我预想的要容易得多。这工作对我来说:

doC# Doctor instance 
SelectedCooperations = doc.coopsort.all() 
0

在两种模型中都不需要定义ManyToManyField。如果你需要在Doctor模式:

class Doctor(models.Model): 
    coopsort = ManyToManyField('Cooperation', related_name='coopsort') 
    name = models.CharField(...) 

class Cooperation(models.Model): 
    cooperation_name = ... 

那么你可以像这样过滤cooperations:由医生名字

由医生ID

cooperations = Cooperation.objects.filter(doctor__id=1) 

cooperations = Cooperation.objects.filter(doctor__name='John') 
+0

谢谢,但我需要在医生模型上使用m2m字段的查询结构。 – caliph

+0

@caliph我编辑了答案 – doru

0
doC# Doctor instance 
queryset1 = doc.coopsort.all() 
queryset2 = Cooperation.objects.filter(doctor=doc).all() 
queryset = queryset1 | queryset2 

related_name无法在m2m中工作