一个页面上的多个表单

Posted

技术标签:

【中文标题】一个页面上的多个表单【英文标题】:Several forms on a page 【发布时间】:2012-02-06 13:36:07 【问题描述】:

我对 Django 比较陌生,并尝试创建一个页面,我在其中提出问题并允许用户给出两个答案。所以我想显示一个问题列表,以及下面两个猜测的字段。我尝试使用表单,但无法保存或验证从这些表单中获取的数据。 下面是我的相关代码。

来自 models.py:

class Subject(models.Model):
    subject = models.FloatField(verbose_name='ID')

class SubjectForm(forms.Form):
    subject = forms.FloatField()

class General(models.Model):
    question = models.CharField(max_length=400)
    answer = models.FloatField()

class Guess(models.Model):
    general = models.ForeignKey(General)
    subject = models.ForeignKey(Subject)
    lower = models.FloatField('lower boundary')
    upper = models.FloatField('upper boundary')

class GuessForm(forms.Form):
    lower = forms.FloatField()
    upper = forms.FloatField()

来自views.py:

def questions(request):
    if request.method == 'POST': # If answers were submitted
        for question in all_questions:
            form = GuessForm()

            if form.is_valid():
                lower = request.POST.get('lower','')
                upper = request.POST.get('upper','')
                new_guess = Guess(pk = 'question',
                    subject = subject,
                    lower = lower,
                    upper = upper)
                new_quess.save()
                return HttpResponseRedirect('/general_knowledge/questions/thanks/')
            else:
                form = GuessForm()
                csrfContext = RequestContext(request,'form': form)

                return render_to_response('general_knowledge/question_form.html',
                    'all_questions': all_questions,
                    context_instance=RequestContext(request))

来自模板

% for question in all_questions %
    <form action="" method="post">% csrf_token %
        <ol>
            <p><LI>  question.question .</p>
            <label for="lower">Lower boundary:</label><input type="text" name="lower">
             form.lower.errors 
            <label for="upper">Upper boundary: </label><input type="text" name="upper">
             form.upper.errors 
        </ol>
    </form>
% endfor %
<input type="submit" value="Submit" />

【问题讨论】:

【参考方案1】:

您可以在提交时使用 JQuery 打印验证,如下所示:

$("input[type="submit"]).click(function () 
        if ($("#lower").text() == // some condition
        
            $("#validation").show();
        
        else 
            $("Form").submit();
        
    );

【讨论】:

尽管接受了,但我看不出它是如何回答书面问题的。问题是关于如何在 Django 中验证和保存表单数据。客户端的 jQuery 验证将是一个很好的补充,但这不是问题所在。 @PaulD.Waite 如果这最终帮助了她——她可能不需要更多。比0个答案好,如果你有更正确的答案,我会很高兴你写出来。

以上是关于一个页面上的多个表单的主要内容,如果未能解决你的问题,请参考以下文章

多个页面上的多个 ajax 和表单发布请求

django:csrf_token 用于单个页面上的多个表单和 ajax 请求

将“数据库 id”分配给页面上的多个 html id

页面jquery上的多个依赖选择框

jQuery show() 和 hide() 用于页面上的多个链接

Laravel Eloquent 搜索表单查询(表单中的多个参数)