ehs*_*adi 3 django django-models django-queryset
我的模型:
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')
Run Code Online (Sandbox Code Playgroud)
出于某种原因,我被迫在类别模型而不是课程模型中添加 many2many
我的问题:如何按类别 ID 在 CourseRun 上搜索
像这样的东西:
CourseRun.objects.filter(course__category__in=[1, 2])
Run Code Online (Sandbox Code Playgroud)
如果您设置了related_query_name
[Django-doc],那么这就是您在反向过滤时应该使用的名称。如果你设置了related_name
[Django-doc],而不是 a related_query_name
,那么 Django 也会使用related_name
for related_query_name
。如果不设置related_name
and related_query_name
,related_name
则将默认为modelname_set
(so here category_set
) and related_query_name
to modelname
(so here category
)。
related_name
因此,您可以使用related_name
查询中的进行过滤:
CourseRun.objects.filter(course__category_set__in=[1, 2])
Run Code Online (Sandbox Code Playgroud)
related_query_name
另一种选择是将 设置related_query_name
为其他内容,例如'category'
:
class Category(models.Model):
courses = models.ManyToManyField(
Course,
related_name='category_set',
related_query_name='category'
)
Run Code Online (Sandbox Code Playgroud)
然后你可以过滤:
CourseRun.objects.filter(course__category__in=[1, 2])
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
598 次 |
最近记录: |