Получение данных через внешний ключ

Я только начинающий изучать фреймворк django.

Я пытаюсь разработать учебный портал, где каждая тема будет иметь свой собственный тест. Мои модели следующие:

class Quiz(models.Model):
    title = models.CharField(max_length=255)
    book_name = models.CharField(max_length=255)
    slug = models.SlugField(blank = True)
    topic = models.CharField(max_length=255)
    number_of_questions = models.IntegerField()
    
    class Meta:
        verbose_name_plural = 'Quizes'
        
    def __str__(self):
        return self.title
   

Модель моего вопроса выглядит следующим образом:

class Quest(models.Model):
    quiz = models.ForeignKey(Quiz, on_delete= models.CASCADE)
    question_text = models.CharField(max_length=500)
    option_1 = models.CharField(max_length=250)
    option_2 = models.CharField(max_length=250)
    corr_ans = models.CharField(max_length=250)
    
       
    def __str__(self):
        return self.question_text
    
    class Meta:
        verbose_name_plural = 'Questions'

Мое мнение таково:

def questions(request, url):
    questions = Quiz.quest_set.filter(slug = url)
    return render(request, 'quiz/questions.html', {'questions': questions})

Каждый тест имеет несколько заданий (вопросов). Я хочу вызывать вопросы, используя slug викторины.

Django показывает мне ошибку "'ReverseManyToOneDescriptor' object has no attribute 'filter'".

Я много пробовал и искал, однако, так и не смог понять, как отбрасывать вопросы, используя slug викторины, т.е. обратный поиск.

Я также обратился к следующей ссылке stackoverflow [https://stackoverflow.com/questions/15306897/django-reverse-lookup-of-foreign-keys][1]

Каким образом лучше всего получить вопросы, относящиеся к определенному тесту, и просмотреть их на странице, поскольку в каждой книге будет несколько тестов, и избежать вышеупомянутой ошибки.

Спасибо за ваше время и поддержку.

Приветствуем Саид

Вы должны выполнить следующий запрос:

questions = Quiz.objects.get(slug=url).quest_set.all()

Что вы делаете выше:

  • Получение викторины на основе заданного slug: Quiz.objects.get(slug=url)
  • Получите все связанные вопросы: .quest_set.all()
Вернуться на верх