Объекты фильтра модели 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()