2012-04-06 128 views
2

这里是我的模型,
过滤Django的查询集包括多对多字段中的特定对象

class Age(models.Model): 
    layer = models.CharField(max_length=50) 
    order = models.PositiveIntegerField() 
    ... 
class Course(models.Model): 
    target_age = models.ManyToManyField('Age') 
    ... 

我怎样才能得到一个疗程的查询集包括特定的年龄?
观点:

request_courses = Course.objects.filter(target_age ... 

回答

15

你的问题有点含糊。首先,有文档上querying across relationships.

读。如果你想获得与特定的字段值相关的,只有那些Age的课程:

Course.objects.filter(target_age__FIELD=...) 

其中字段在Age模型中场你想要查询。

或者,如果你有一个Age对象,你想要得到的是实际涉及到一个特定的Age对象的所有课程,您需要:

age = Age.objects.get(...) 
courses = Course.objects.filter(target_age=age) 

,或者如果你想获得那些相关的课程许多可能的Age的中的至少一个:

ages = Age.objects.filter(...) 
courses = Course.objects.filter(target_age__id__in=ages.values_list('id')) 

EDIT

最后一个例子是使用the in lookup

+0

对不起,我的信息较少。我要求的情况正是最后一个!而且,如果课程有多个target_age,我不能使用第二个查询来获得查询,对吗? – 2012-04-06 01:22:30