Я пытаюсь изучить фреймворк django с несколькими примерами приложений.В настоящее время я работаю над приложением обратной связи / опроса.В нем используются следующие модели:
class Survey(models.Model):
title = models.CharField(_(max_length=255)
slug = models.SlugField(_(max_length=255, unique=True)
description= models.TextField(blank=True)
class Question(models.Model):
survey = models.ForeignKey(Survey, related_name='questions')
question = models.TextField()
class Answer(models.Model):
question = models.ForeignKey(Question, related_name='answers')
answer = models.TextField()
В основном опрос будет содержать вопросы, и их ответы будут сохранены в ответе.
Теперь я не понимаю, как создать формукоторый будет отображать все вопросы опроса при вызове представления.Я пытался создать форму, подобную этой:
class BaseAnswerForm(Form):
answer = None
def __init__(self, question,*args, **kwdargs):
self.question = question
#self.answer = None
super(BaseAnswerForm, self).__init__(*args, **kwdargs)
answer = self.fields['answer']
answer.label = question.question
def save(self, commit=True):
ans = self.answer
if ans is None:
ans = Answer()
ans.question = self.question
ans.answer = self.cleaned_data['answer']
if commit: ans.save()
return ans
class TextAnswerForm(BaseAnswerForm):
answer = CharField()
def forms_for_survey(survey, request):
if request.POST:
post = request.POST
else:
post = None
return [TextAnswerForm(q,data=post)
for q in survey.questions.all()]
. Это выглядит как
def show_questions(request, slug):
survey = get_object_or_404(Survey.objects, slug=slug)
forms = forms_for_survey(survey, request)
context = {
'survey':survey,
'forms':forms,
}
if (request.POST and all(form.is_valid() for form in forms)):
for form in forms:
form.save()
return HttpResponseRedirect(reverse('show_surveys',))
return render_to_response(
'feedback/show_questions.html',
context,
context_instance = RequestContext(request)
)
. Это значит, что она генерирует форму так, как я хочу, но все ответысохранено из поля последнего ответа.Пожалуйста, помогите мне, будет ли это легче с помощью наборов форм, Можете ли вы сказать мне, как это может быть реализовано проще.Спасибо