使用 related_name 查询 manyToMany 字段
query on manyToMany field with related_name
我的模特:
class Course(models.Model):
pass
class CourseRun(models.Model):
course = models.ForeignKey(Course, related_name='course_runs')
class Category(models.Model):
courses = models.ManyToManyField(Course, related_name='category_set')
出于某种原因,我不得不在类别模型而不是课程模型中添加 many2many
我的问题:
我如何按类别 ID
在 CourseRun 上搜索
像这样:
CourseRun.objects.filter(course__category__in=[1, 2])
如果您设置 related_query_name
[Django-doc], then that is the name you should use when filtering in reverse. If you set the related_name
[Django-doc],而不是 related_query_name
,那么 Django 也会使用 related_name
作为 related_query_name
。如果你不设置 related_name
和 related_query_name
,那么 related_name
将默认为 <i>modelname</i>_set
(所以这里 category_set
) 和 related_query_name
到 <i>modelname</i>
(所以这里 category
).
选项 1:使用 related_name
因此您可以在查询中使用 related_name
进行过滤:
CourseRun.objects.filter(course__<b>category_set</b>__in=[1, 2])
选项 2:设置 related_query_name
另一种选择是将 related_query_name
设置为其他值,例如 'category'
:
class Category(models.Model):
courses = models.ManyToManyField(
Course,
related_name='category_set',
<b>related_query_name='category'</b>
)
然后你可以过滤:
CourseRun.objects.filter(course__<b>category</b>__in=[1, 2])
我的模特:
class Course(models.Model):
pass
class CourseRun(models.Model):
course = models.ForeignKey(Course, related_name='course_runs')
class Category(models.Model):
courses = models.ManyToManyField(Course, related_name='category_set')
出于某种原因,我不得不在类别模型而不是课程模型中添加 many2many
我的问题: 我如何按类别 ID
在 CourseRun 上搜索像这样:
CourseRun.objects.filter(course__category__in=[1, 2])
如果您设置 related_query_name
[Django-doc], then that is the name you should use when filtering in reverse. If you set the related_name
[Django-doc],而不是 related_query_name
,那么 Django 也会使用 related_name
作为 related_query_name
。如果你不设置 related_name
和 related_query_name
,那么 related_name
将默认为 <i>modelname</i>_set
(所以这里 category_set
) 和 related_query_name
到 <i>modelname</i>
(所以这里 category
).
选项 1:使用 related_name
因此您可以在查询中使用 related_name
进行过滤:
CourseRun.objects.filter(course__<b>category_set</b>__in=[1, 2])
选项 2:设置 related_query_name
另一种选择是将 related_query_name
设置为其他值,例如 'category'
:
class Category(models.Model):
courses = models.ManyToManyField(
Course,
related_name='category_set',
<b>related_query_name='category'</b>
)
然后你可以过滤:
CourseRun.objects.filter(course__<b>category</b>__in=[1, 2])