2017-11-03 26 views
1

教師が生徒に質問をし、生徒から回答を得るウェブサイトを構築しています。Django:1つのビューから複数のオブジェクトを作成する

各「レビュー」は、タイトル、説明、および外部キーによるレビューに関連する一連の質問で構成されます。質問は1つずつ追加され、さらに追加するために、追加のフィールドを追加するためにJavascriptが使用されます。

私は現在、1つのビューを持つことによってこれを行う方法を考えています。これは、レビューオブジェクトを作成したフォームをまず処理してタイトル、説明、およびユーザーを作成したユーザーです。ユーザーが入力したすべての質問には、作成したばかりのレビューのIDを使用して、それぞれのオブジェクトを作成します。

私は単純なフォームとレビューブロックを作成するビューを作成しましたが、ユーザーが追加したい質問の処理方法についてはわかりません。

これ以外の方法がある場合は、お知らせください。

おかげ

答えて

0

ユーザーはDjangoのadminになります場合は、inlineModelAdminは、あなたが探しているものです。 https://docs.djangoproject.com/en/1.11/ref/contrib/admin/#django.contrib.admin.InlineModelAdmin

このビューは、Djangoの管理外となります場合はあなたがその機能を複製することができますモデルフォームセット: https://docs.djangoproject.com/en/1.11/topics/forms/modelforms/#model-formsets

これにより、同じモデルフォームの可能性のあるインスタンスを多数作成できるため、ユーザーはレビューオブジェクトを作成してレビューに関連する1つ以上の質問を作成できます。

+0

「Django Admin」では、Django管理者ページにアクセスし、そのようなレビューを追加することを意味しますか? – wtreston

+0

この回答は少し混乱しています。管理者はインライン・フォームセットを作成せず、InlineAdminを作成し、Djangoは自動的にフォームセットを処理します。 OPのユースケースでは、インラインの書式設定*が必要なものです。 –

+0

申し訳ありませんが、私は自分の答えをもう一度読んでください。説明を追加していただきありがとうございます。私は私の答えを更新します。 – vjimw

1

私はあなたのmodels.pyにおよそこれらのクラスを持っていることを仮定している:

Student 
Teacher 
Review 
Question 

したがって、それはあなたが実装したいものを容易にするための基礎となるデータモデルを設定することです。ここでは、多対多の関係を実装して、レビューへの質問と回答をマッピングする必要があることをお勧めします。何かのように、各レビューについて 、あなたは質問にそれを参加させる必要があります:

class ReviewQuestions(models.Model): 
    questionID = models.ForeignKey(Question) 
    reviewID = models.ForeignKey(Review) 
    questionNumber = models.IntegerField() 

は質問のリストにレビューをアップに参加する必要があり、あなたも(上記の例のように)質問番号を追加することができます。

あなたは、このようなものを使用してのご質問には、各生徒の解答をリンクする必要があるだろう答えをアップに参加するには、次の答えは整数または何か他のものかもしれないが、この構造があることを意味するであろう、もちろん

class ReviewQuestionAnswers(models.Model): 
    reviewQuestionID = models.ForeignKey(ReviewQuestions) 
    studentID = models.ForeignKey(Student) 
    answer = models.TextField() 

各レビューの質問ごとに、各学生の回答を保存することができます。

次に、ReviewQuestionsモデルがreviewIDにリンクされるので(すべての詳細を取得できるように)、ReviewQuestionsモデルをレンダリングし、追加する各質問ごとにレコードを追加するだけです。

関連する問題