过滤django queryset,包括manytomany字段中的特定对象

koi*_*i_n 4 django many-to-many filter

这是我的模特,

class Age(models.Model):
    layer = models.CharField(max_length=50)
    order = models.PositiveIntegerField()
    ...
class Course(models.Model):
    target_age = models.ManyToManyField('Age')
    ...
Run Code Online (Sandbox Code Playgroud)

如何获得包含特定年龄的课程查询集?
观点:

request_courses = Course.objects.filter(target_age ...
Run Code Online (Sandbox Code Playgroud)

Tim*_*ony 17

你的问题有点模糊.首先,阅读有关跨关系查询的文档.

如果您想获得仅Age与具有特定字段值的那些相关的课程:

Course.objects.filter(target_age__FIELD=...)
Run Code Online (Sandbox Code Playgroud)

其中FIELD是Age您要查询的模型中的字段.

或者,如果您有一个Age对象并且想要获得与特定Age对象实际相关的所有课程,则需要:

age = Age.objects.get(...)
courses = Course.objects.filter(target_age=age)
Run Code Online (Sandbox Code Playgroud)

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

ages = Age.objects.filter(...)
courses = Course.objects.filter(target_age__id__in=ages.values_list('id'))
Run Code Online (Sandbox Code Playgroud)

编辑

最后一个例子是使用in查找