TypeError: объект 'Review' не повторяется Django объект не повторяется - PullRequest
0 голосов
/ 08 мая 2020

Я пытаюсь получить все объекты из поля многие ко многим в моей модели курса и отфильтровать их на основе кода курса. В основном я пытаюсь вернуть все отзывы о курсах с таким же кодом курса. Но я получаю сообщение об ошибке:

TypeError: 'Review' object is not iterable

, и он ничего не возвращает.

Когда я распечатываю его, я получаю: <QuerySet [<Course_course_reviews: Course_course_reviews object (1)>]>, который является набором запросов, но я не знаю, почему это ничего не возвращает в моей модели курса. У меня есть метод:

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)

, а ссылка «многие ко многим» с моделью обзора:

course_reviews = models.ManyToManyField(Review, blank=True, related_name='course_reviews')

Почему он ничего не возвращает в моем шаблоне? Я не понимаю, в чем проблема.

Я также хотел бы добавить, что когда я распечатываю отзывы, отправленные из моего представления, в свой шаблон, я получаю: <QuerySet [<Course_course_reviews: Course_course_reviews object (1)>]>

Модели:

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

1 Ответ

1 голос
/ 08 мая 2020

Добавьте метод в свою модель как,

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

    <b>def get_reviews(self):
        return Review.objects.filter(course_reviews__course_code=self.course_code).distinct()</b>

Использование

course_instance = Course.objects.get(id=12345)
reviews = course_instance<b>.get_reviews()</b>
...