1

質問と調査の2つのモデルがあります

class Question(models.Model):
text = models.TextField()
category = models.CharField(max_length=20, choices=(('personal', 'Personal'), ('team', 'Team'), ('company', 'Company')))
low_answer = models.CharField(max_length = 200, null=True)
high_answer = models.CharField(max_length = 200, null=True)


class Survey(models.Model):
description = models.CharField(max_length = 200, null=True)
date = models.DateTimeField(auto_now_add=True)
category = models.CharField(max_length=20, choices=(('personal', 'Personal'), ('team', 'Team'), ('company', 'Company')))
questions = models.ManyToManyField(Question)

それで、SurveyにはManytoManyのようなフィールド質問がありますが、各質問の回答を収集するSurveyのフォームを作成するにはどうすればよいでしょうか。各質問に必要なのはint値だけです。私は自分でフォームを作成したくないので、これにはdjangoを使用したいと思います。

考え?

4

2 に答える 2

0

django モデルのフォームセットを使用して、複数の質問を含むフォームを作成できます

余談ですが、 からではなくからへのForiegnKey( OneToMany) 関係が必要だと思います。調査には多くの質問がありますが、質問インスタンスは 1 つの調査にしかありません。SurveyQuestionManyToMany

于 2012-08-26T09:46:17.037 に答える
0

* 最初に必要なのは、多対多の関係の追加フィールドです *

あなたのモデルでは、 と呼ばれる 3 番目のクラスが恋しいAnswerです。anAnswerは a に対する a の応答SurveyですQuestion。int 値はこの新しいクラスになります。詳細については、多対多関係の追加フィールドを参照してください。シナリオの場合:

class Question(models.Model):
    ...

class Survey(models.Model):
    ...
    questions = models.ManyToManyField(Question, through='Answer'))

class Answer(models.Model):                   #<- this is the new model
    question = models.ForeignKey(Question)
    survey = models.ForeignKey(Survey)
    response = models.IntegerField()

*フォームセット*

この時点で、フォームを作成するには、modelformset_factoryを使用できます。

from django.forms.models import modelformset_factory
AnswersFormSet = modelformset_factory(Answer)
formset = AnswersFormSet(queryset=Answer.objects.filter(question= some_question))

*それだけです*

于 2012-08-26T09:51:21.933 に答える