Как передать в форму параметр 'pk' другой модели
Выбираем категорию вопросов, рандомно берётся вопрос из этой категории, и, отображаются варианты ответов к этому вопросу. Проблема - не знаю как подать в форму 'pk' выбранного вопроса.
models.py :
from django.db import models
class Category(models.Model):
name = models.CharField(max_length=100)
possible_ticket_numbers = models.CharField(max_length=500, blank=True)
def get_questions(self):
return self.questions.all()
def __str__(self):
return self.name
class Question(models.Model):
number_in_tests = models.IntegerField(null=False)
text = models.CharField(max_length=255)
right_answer = models.CharField(max_length=200)
correct = models.BooleanField(default=False)
category = models.ForeignKey(Category, on_delete=models.CASCADE, related_name='questions')
def get_answers(self):
return self.answers.all()
def __str__(self):
return str(self.number_in_tests)
class Answer(models.Model):
content = models.CharField(max_length=200)
question = models.ForeignKey(Question, on_delete=models.CASCADE, related_name='answers')
def __str__(self):
return self.content
view.py :
import ast
import random
from django.http import HttpRequest
from django.shortcuts import render
from .forms import AnswerForm
from .models import Category, Question
def category_list(request: HttpRequest):
context = {
'categories': Category.objects.all()
}
for category in context['categories']:
ticks = [tick.id for tick in Question.objects.filter(category_id=category.pk)]
category.possible_ticket_numbers = str(ticks)
category.save()
return render (request, 'start.html', context=context)
def ticket_request(request: HttpRequest, pk):
category = Category.objects.select_for_update().get(id=pk)
# При помощи библиотеки 'ast', получаем список из строки со списком
list_of_possible_tickets_ids = ast.literal_eval(category.possible_ticket_numbers)
if not list_of_possible_tickets_ids:
return render(request, "no_tickets.html", context={"body": "<h1>No Tickets Here !</h1>"})
# Выбираем случайный билет из предложенного списка, и, удаляем этот билет из списка
random_ticket_id = random.choice(list_of_possible_tickets_ids)
list_of_possible_tickets_ids.remove(random_ticket_id)
# Список - обратно в строку со списком внутри, и - сохраняем в БД
category.possible_ticket_numbers = str(list_of_possible_tickets_ids)
category.save()
ticket = Question.objects.get(category=pk, number_in_tests=random_ticket_id)
form = AnswerForm()
return render(request, 'ticket.html', {'ticket': ticket, 'form': form})
forms.py
from django import forms
from django.forms.widgets import CheckboxSelectMultiple
from .models import Answer
class AnswerForm(forms.ModelForm):
question = forms.ModelChoiceField(
queryset=Answer.objects.filter(question_id=1),
label='Выберите ответ :',
widget=CheckboxSelectMultiple
)
class Meta:
model = Answer
fields = ['question',]
Здесь в 'queryset=Answer.objects.filter(question_id=1)' , намеренно записал 'id=1' ,
а должно быть 'id=ticket.pk'. Только как этот 'ticket.pk' сюда передать ? Буду благодарен за помощь !
На выходе должна быть такая "картинка" :