Объекты фильтра модели Django, имеющие поле как объект self (пожалуйста, прочитайте тело вопроса)

У меня есть две модели Quiz и ABCD ABCD связана с Quiz с помощью oneToOneField Модель Quiz будет использоваться для хранения викторины, а ABCD - модель, используемая для хранения результатов для пользователя. один тест будет подключен к нескольким ABCD (один тест будет иметь несколько результатов) Внутри модели Quiz я хочу метод, который вернет все результаты для этого теста (объекты ABCD, имеющие этот тест в качестве поля викторины), что я должен написать, чтобы отфильтровать ABCD с этим тестом

class Quiz(models.Model):
    name=models.CharField(max_length=250)
    def show_results(self):
        return ABCD.objects.filter(quiz=what to write here)

class ABCD(models.Model):
    quiz=models.OneToOneField(Quiz,on_delete=models.CASCADE)
    points=models.IntegerField()

Для получения ABCD, связанных с Quiz, не нужно использовать фильтр модели, Django создает related_name автоматически (вы можете указать его в поле, если предпочитаете другое имя). Вы можете получить к нему доступ по:

def show_results(self):
   return self.abcd_set.all()

Вам не нужен метод 'show_result', но это на ваше усмотрение.

Сопутствующее замечание: ваши модельные отношения являются отношениями один-к-одному, в то время как я полагаю, что вы хотите использовать поля многие-к-одному или models.ForeignKey. Аксессор один-к-одному будет просто quiz.abcd, потому что есть только один!

Если в одном тесте будет множественное число ABCD, вы должны изменить OneToOneField на ForeignKey:

class ABCD(models.Model):
    quiz=models.ForeignKey(Quiz,on_delete=models.CASCADE)
    points=models.IntegerField()

then with instance of Quiz model:

quiz = Quiz.objects.get(pk=1) // for example

для получения набора всех объектов ABCD, у которых этот тест является внешним ключом:

quiz.abcd_set.all()
Вернуться на верх