Django的查询集与多个M2M领域
问题描述:
我有这些模型: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>
答
比我预想的要容易得多。这工作对我来说:
doC# Doctor instance
SelectedCooperations = doc.coopsort.all()
答
在两种模型中都不需要定义ManyToManyField
。如果你需要在Doctor
模式:
class Doctor(models.Model):
coopsort = ManyToManyField('Cooperation', related_name='coopsort')
name = models.CharField(...)
class Cooperation(models.Model):
cooperation_name = ...
那么你可以像这样过滤cooperations
:由医生名字
cooperations = Cooperation.objects.filter(doctor__id=1)
cooperations = Cooperation.objects.filter(doctor__name='John')
答
doC# Doctor instance
queryset1 = doc.coopsort.all()
queryset2 = Cooperation.objects.filter(doctor=doc).all()
queryset = queryset1 | queryset2
related_name
无法在m2m中工作
为什么你需要在这两个模型manytomany? –
都有不同的功能原因。 – caliph