私のdjangoアプリケーションでは、オブジェクトのセットから質問を生成しようとしています。答えが得られたら、ユーザーが正しい答えのどれくらいに基づいてスコアを持つ結果オブジェクトを作成します。Djangoでフォームを間接的に使用できますか?
質問オブジェクトのセットを適切な部分に分割して、フォームを生成するために反復処理を行いました。私が知りたいのは、ページ上のチェックボックスの総数と選択されたチェックボックスの数を計算し、それをdjangoに渡す方法です。ビュー内の結果オブジェクトのスコア属性を計算して設定することができます。
私がModelFormsを見てきたことから、後で計算するためにデータを直接バックエンドに送信するのではなく、データベースに直接入力するだけで動作します。さらに、ModelFormは作成したいモデルタイプから生成されますが、私は別のモデルから生成されたフォームの結果として結果を作成したいと考えています。この例では、特定の概念についての質問があるだろう、テンプレートで
class Concept(Chunk):
application = models.CharField(max_length=500)
subconcept1 = models.CharField(max_length=500, blank=True, null=True)
subconcept2 = models.CharField(max_length=500, blank=True, null=True)
subconcept3 = models.CharField(max_length=500, blank=True, null=True)
subconcept4 = models.CharField(max_length=500, blank=True, null=True)
subconcept5 = models.CharField(max_length=500, blank=True, null=True)
subconcept6 = models.CharField(max_length=500, blank=True, null=True)
subconcept7 = models.CharField(max_length=500, blank=True, null=True)
subconcept8 = models.CharField(max_length=500, blank=True, null=True)
subconcept9 = models.CharField(max_length=500, blank=True, null=True)
subconcept10 = models.CharField(max_length=500, blank=True, null=True)
conceptimage = models.FileField(blank=True, null=True)
@property
def mode(self):
return "concept"
class Result(models.Model):
rel_chunk = models.ForeignKey(Chunk, on_delete=models.CASCADE)
score = models.IntegerField()
timestamp = models.DateTimeField(auto_now_add=True)
user = models.ForeignKey(Profile, on_delete=models.CASCADE)
class Meta:
get_latest_by = 'timestamp'
:ここ
は結果とコンセプト私のクエリを実証するためのモデルです。答えを得るためのボタンは、質問のdivを隠し、答えdivをその場所に置きます。答えdivは、各サブ概念を示す概念とその隣のチェックボックスを繰り返します。次に、ユーザーはボタンを押してこれを送信し、送信時に結果オブジェクトのスコアを計算するためにユーザー入力を取得します。
コードを表示すると、あなたの質問はより明確になります。モデルフォームが要件を満たしていない場合は、通常のフォームを使用できます。 – Alasdair
明確にするために私のモデルのセクションを追加しました。私はまだdjangoで定期的なフォームを使用して来ていない。あなたは役に立つリソースの方向に私を指摘できますか?私がdjangoとフォームを検索したときは、モデルフォームを使用した結果しか得られませんでした。 – Era
私は[Django docs](https://docs.djangoproject.com/ja/1.10/topics/forms/)から始める – Alasdair