Reputation: 1324
I am trying to get all object from a many to many field in my course model and filter them based on the course code. Basically, I am trying to return all the reviews for courses with same course code. But I get the error:
TypeError: 'Review' object is not iterable
and it returns nothing.
When I print it out I get: <QuerySet [<Course_course_reviews: Course_course_reviews object (1)>]>
which is a query set but I do not know why it is not returning anything in my course model I have the method:
def get_reviews(self):
return Course.course_reviews.through.objects.filter(course__course_code=self.course_code,course__course_university=self.course_university,course__course_instructor=self.course_instructor)
and the many to many link with review model is:
course_reviews = models.ManyToManyField(Review, blank=True, related_name='course_reviews')
Why isnt it returning anything in my template? I am confused on what the issue is here.
I also like to add that when I print the reviews sent form my view to my template I get: <QuerySet [<Course_course_reviews: Course_course_reviews object (1)>]>
Models:
class Review(models.Model):
author = models.ForeignKey(Profile, on_delete=models.CASCADE)
body = models.TextField(validators=[MaxLengthValidator(400)])
created_on = models.DateTimeField(auto_now_add=True)
likes= models.ManyToManyField(Profile, blank=True, related_name='review_likes')
class Course(models.Model):
course_code = models.CharField(max_length=20)
course_university = models.CharField(max_length=100)
course_instructor = models.CharField(max_length=100)
course_reviews = models.ManyToManyField(Review, blank=True, related_name='course_reviews')
Upvotes: 0
Views: 487
Reputation: 88619
Add a method in your model as,
class Course(models.Model):
course_code = models.CharField(max_length=20)
course_university = models.CharField(max_length=100)
course_instructor = models.CharField(max_length=100)
course_reviews = models.ManyToManyField(Review, blank=True, related_name='course_reviews')
def get_reviews(self):
return Review.objects.filter(course_reviews__course_code=self.course_code).distinct()
course_instance = Course.objects.get(id=12345) reviews = course_instance.get_reviews()
Upvotes: 1