查询与related_name的manyToMany字段

时间:2020-02-19 11:33:16

标签: django django-models django-queryset

我的模特:

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<section class="text">
  CLICK THE BUTTON TO<br> CHANGE THE BACKGROUND!
</section>
<button id="btn">CLICK ME!</button>

由于某种原因,我被迫在类别模型而不是课程模型中添加many2many


我的问题: 如何按类别ID在CourseRun上搜索

类似这样的东西:

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')

1 个答案:

答案 0 :(得分:5)

如果设置了related_query_name [Django-doc],则这是在反向过滤时应使用的名称。如果您设置related_name [Django-doc]而不是related_query_name,那么Django也将related_name用于related_query_name。如果您未设置related_namerelated_query_name,则related_name将默认为modelname_set(因此此处为category_set),而related_query_name将默认为{{ 1}}(这里是modelname)。

选项1:使用category

因此您可以在查询中使用related_name进行过滤:

related_name

选项2:设置一个CourseRun.objects.filter(course__category_set__in=[1, 2])

另一种选择是将related_query_name设置为其他内容,例如related_query_name

'category'

然后,您可以使用以下内容进行过滤:

class Category(models.Model):
    courses = models.ManyToManyField(
        Course,
        related_name='category_set',
        related_query_name='category'
    )