2012-04-07 2 views
0

Я делаю обзорный сайт с django. Я довольно новичок в django, поэтому заранее извиняюсь, если не могу объяснить. Мой вопрос фокусируется на следующих моделях:Django formsets

class SurveyType(models.Model): 

    name = models.CharField(max_length=200) 

    def __unicode__(self): 
     return self.name  

class Question(models.Model): 

    ANSWERTYPE_CHOICES = (
     (u'T', u'Text'), 
     (u'R', u'Range'), 
     (u'M', u'Media'), 
    ) 

    question = models.CharField(max_length=200) 

    surveytype = models.ForeignKey(SurveyType) 

    answertype = models.CharField(max_length=1, choices=ANSWERTYPE_CHOICES) 

    order = models.IntegerField(default=0) 

    def __unicode__(self): 
     return self.question   


class Survey(models.Model): 

    course = models.ForeignKey(Course) 

    surveytype = models.ForeignKey(SurveyType) 

    def __unicode__(self): 
     return u"%s %s" % (self.course, self.surveytype) 

class Answer(models.Model): 

    answer = models.CharField(max_length=400) 

    survey = models.ForeignKey(Survey) 

    question = models.ForeignKey(Question) 

    def __unicode__(self): 
     return self.answer 

Django получает идентификатор обследования. С идентификатором опроса он получает опросник и показывает вопросы, которые должны отображаться.

def survey(request, survey_id): 
    survey_data = get_object_or_404(Survey, pk=survey_id) 
    survey_type = survey_data.surveytype 
    questions = Question.objects.all().filter(surveytype = survey_type).order_by('order') 

Я прочитал Джанго документацию о FormSets, но я не понимаю, что я должен написать в forms.py, так что я не могу назвать форму в views.py оказывать де форму в шаблоне который показывает вопросы и записывает ответы в модели ответов.

Заранее благодарим за мой английский.

ответ

1

, решаемые с помощью modelforms и цикл FOOR.

Models.py

class Question(models.Model): 
    question = models.CharField(max_length=200) 
    surveytype = models.ForeignKey(SurveyType) 
    answertype = models.ForeignKey(ContentType, 
    limit_choices_to = Q(name='text answer', app_label='surveys')| \ 
    Q(name='media answer', app_label='surveys')| \ 
    Q(name='range answer', app_label='surveys')) 

class RangeAnswer(models.Model): 
    answer = models.IntegerField(max_length=1, choices=CHOICES_RANGE, default=0) 
    def __unicode__(self): 
     return u'%s'%(self.answer) 

class TextAnswer(models.Model): 
    answer= models.CharField(max_length=200) 
    def __unicode__(self): 
     return u'%s'%(self.answer) 

class MediaAnswer(models.Model): 
    answer= models.ForeignKey(Media) 
    def __unicode__(self): 
     return u'%s'%(self.answer) 

Forms.py

class RangeAnswerForm(forms.ModelForm): 
    def __init__(self, *args, **kwargs): 
     super(RangeAnswerForm, self).__init__(*args, **kwargs) 
     self.fields['answer'].label = "Mi valoración"  
    class Meta: 
     model = RangeAnswer 
     widgets = { 
      'answer': forms.RadioSelect(renderer=RadioRenderer) 
     } 
RangeAnswer.form = RangeAnswerForm 

class MediaAnswerForm(forms.ModelForm): 
    def __init__(self, *args, **kwargs): 
     super(MediaAnswerForm, self).__init__(*args, **kwargs) 
     self.fields['answer'].label = "Medio"  
    class Meta: 
     model = MediaAnswer 
MediaAnswer.form= MediaAnswerForm 

class TextAnswerForm(forms.ModelForm): 
    def __init__(self, *args, **kwargs): 
     super(TextAnswerForm, self).__init__(*args, **kwargs) 
     self.fields['answer'].label = "Respuesta"  
    class Meta: 
     model = TextAnswer 
TextAnswer.form = TextAnswerForm 

Views.py

for q in questions : 
    q.form = q.answertype.model_class().form(prefix="%s"%q.id) 
0

Вы импортируете форму в свои виды.py?

После этого вам просто нужно создать представление, которое передаст форму шаблону.

Например, в views.py

def your_form(request): 
    form = RegisterForm() 
    return render_to_response('your_template.html', {'form': form}, RequestContext(request)) 

, а затем в шаблоне вы можете сделать вид, просто написав

{{ form }} 
+0

Да, но проблема в том, что я не знаю, что писать в формах .py. Документация Django показывает, как работать с формами, использующими одну или две модели, а не четыре: S. Проблема заключается в создании form.py –

 Смежные вопросы

  • Нет связанных вопросов^_^