my models:
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')
for some reason I was forced to add many2many in Category model instead of Course model
my question: how can I search on CourseRun by category id
somethings like this:
CourseRun.objects.filter(course__category__in=[1, 2])
If you set the 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], and not a related_query_name, then Django will use the related_name for the related_query_name as well. If you do not set a related_name and related_query_name, then related_name will default to modelname_set (so here category_set) and related_query_name to modelname (so here category).
related_nameSo you can filter with the related_name in your query:
CourseRun.objects.filter(course__category_set__in=[1, 2])
related_query_nameAnother option is to set the related_query_name to something else, for example 'category':
class Category(models.Model):
courses = models.ManyToManyField(
Course,
related_name='category_set',
related_query_name='category'
)
Then you can filter with:
CourseRun.objects.filter(course__category__in=[1, 2])
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With