我可以在Django中间接使用表单吗?

时间:2016-11-06 20:12:35

标签: python django forms

在我的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遍历显示每个子概念的概念和旁边的复选框。然后用户点击一个按钮提交这个,然后在提交中我想获得用户输入来计算结果对象的分数。

1 个答案:

答案 0 :(得分:0)

在回复上述评论时,实现您尝试执行的操作的一种方法是在表单中包含隐藏的html字段,例如<input type="hidden" name="result" value="0">。然后在您的视图中,您可以通过request.POST字典对象访问它。

从文档中查看:https://docs.djangoproject.com/en/1.10/ref/request-response/#django.http.HttpRequest.POST

另请查看以下问题:Django - taking values from POST request

要完成这项工作,您需要使用一些javascript代码来更新隐藏输入的值。