#python-3.x #django
#python-3.x #django
Вопрос:
Ниже приведен мой models.py модели:
from django.db import models
from django.contrib.auth.models import User
class Question(models.Model):
question= models.TextField()
optionA= models.CharField(max_length= 32)
optionB= models.CharField(max_length= 32)
optionC= models.CharField(max_length= 32)
optionD= models.CharField(max_length= 32)
answer= models.CharField(max_length= 6, choices= options, default= 'A')
class Test(models.Model):
name= models.CharField(max_length= 16)
questions= models.ManyToManyField(Question)
class TestTaker(models.Model):
user= models.OneToOneField(User, on_delete= models.CASCADE)
tests= models.ManyToManyField(Test)
Ниже приведено мое определение домашней функции, которая отображает веб-сайт
главная страница внутри views.py
def home(request):
try:
tests= TestTaker.objects.filter(user= request.user).values('tests')
print(tests.values)
# tests= Test.objects.filter(user= request.user)
return render(request, 'tests/home.html', {'tests': tests})
except:
print('excepted')
return render(request, 'tests/home.html')
Я хочу извлечь все тесты, назначенные зарегистрированному пользователю. Я могу получить только тестовые объекты, назначенные аутентифицированному пользователю, но я хочу иметь возможность получать весь каждый тест вместе с его вопросами. Как я могу это сделать?
Ответ №1:
Вам не нужно ничего передавать в template, вы можете напрямую отображать тесты, подобные этому:
{% if user.is_authenticated %}
{% for test in user.testtaker.tests.all %}
{{ test }}
{% for qus in test.questions.all %}
{{ qus }}
{% endfor %}
{% endfor %}
{% else %}
Please log in
{% endif %}
Вы можете напрямую обращаться к TestTaker
экземпляру пользователя, поскольку он имеет OneToOne
связь с User
экземпляром.