Я создаю приложение для опроса / опроса.
- Как я могу использовать форму (например, ModelForm) для отображения параметров и переключателя для каждого вопроса на одной странице?(Я прочитал документы, но в настоящее время я не могу создать эффективную ModelForm.)
- Как я могу вернуть все выбранные переключатели в представление, нажав одну кнопку отправки?
Я провел день, читая документы, онлайн-статьи и столько ответов, сколько смог найти.Я подозреваю, что есть несколько факторов, которые я пропустил.
Я прибег к написанию страницы с использованием шаблонных тегов.Я хотел бы узнать, как научиться правильно использовать форму django.
models.py
from django.db import models
from django.contrib.auth.models import User
class Collection(models.Model):
date = models.DateTimeField()
def __str__(self):
return 'Collection of questions'
class Question(models.Model):
question_text = models.CharField(max_length=400)
collection = models.ForeignKey(Collection, on_delete=models.CASCADE, default=None)
date_published = models.DateTimeField('date published')
@property
def options(self):
options = self.option_set.all()
return options if options.exists() else 'No options for this question'
def __str__(self):
return self.question_text
class Option(models.Model):
option_text = models.CharField(max_length=400)
question = models.ForeignKey(Question, on_delete=models.CASCADE)
def __str__(self):
return f'{self.option_text}'
class Answer(models.Model):
claim_reference_number = models.IntegerField()
date_selected = models.DateTimeField('date selected')
chosen_option = models.ForeignKey(Option, on_delete=models.CASCADE)
collection = models.ForeignKey(Collection, on_delete=models.CASCADE)
@property
def question(self):
return self.chosen_option.question
def __str__(self):
return f'{self.claim_reference_number} selected \'{self.chosen_option}\' in response to \'{self.question}\''
views.py
def new_assessment(request, reference_number):
collection = Collection.objects.get(pk=1)
context = {'collection': collection,
'reference_number': reference_number,
}
return render(request, 'ad/templates/new_assessment.html', context)
Template
<h2>New survey</h2>
<form method="POST" action=''>
{% csrf_token %}
<div> reference_number = {{ reference_number }}</div>
{% for question in collection.question_set.all %}
<h5>{{ question.question_text }}</h5>
{% for option in question.option_set.all %}
<p><input type="radio" name="option for {{ question.pk }}" id="option{{ option.pk }}">
<label for="option{{ option.pk }}">{{ option.option_text }}</label></p>
{% endfor %}
{% endfor %}
<br>
<button type="submit" class="save btn btn-default" value="selected">Save</button>
</form>
Ниже приведены мои текущие результаты с использованием тегов html и template.Я хотел бы произвести то же самое, используя форму django.
! [Image] https://imgur.com/gizp0rT