【问题标题】:My modelformset displays already validated forms我的模型表单集显示已验证的表单
【发布时间】:2016-05-22 11:15:07
【问题描述】:

我想创建一个模型表单集来同时记录几个表单,以便能够同时回答许多问题。

这仅在我备份例如 3 个问题和 3 个问题时才有效。如果我返回我的页面或者是表单集,我已经保存了预先填写的 3 个字段...

我不明白为什么在我看来我已经保存在我的数据库中的表格...

这是我在我的数据库中保存 2 个字段后得到的...这再次显示了两个字段,然后是 2...我希望它只显示两个空白表单...

我的表格:

class ReplyForm(forms.ModelForm):
    class Meta:
        model = Reply
        fields = ('question','answer','user')

我的意见.py:

def access(request, instance):
    replies = Reply.objects.all()
    pages = Page.objects.all()
    numPages = Page.objects.get(pk=instance)
    questions = Question.objects.filter(page=instance)
    length_questions = len(questions)
    ReplyFormSet = modelformset_factory(model=Reply, form=ReplyForm, extra=length_questions)
    logged_user = get_logged_user_from_request(request)
    if request.method == 'POST':  
        formset = ReplyFormSet(request.POST)
        if formset.is_valid():
            formset.save()
            return HttpResponse('Successfully')
        else:
            return HttpResponseRedirect('/baseVisite/')
    else:
        formset = ReplyFormSet()
    return render_to_response('polls/access.html', {
     'formset': formset,
     'questions':questions,
     'logged_user':logged_user,
     'numPages' : numPages
     })

忽略instance参数

和我的模板:

<form method="POST" action="">
    {{ formset.management_form }} {% csrf_token %}
    <table>
      {{ formset.as_p }}
    </table>

    <center><input type="submit" value="Submit" class="btn btn-success" />
</form>

当我备份其他元素时,我该怎么做才能让我看不到数据库中的这些元素?

【问题讨论】:

    标签: python django forms django-forms modelform


    【解决方案1】:

    参见the modelformset documentation - 默认情况下,表单集使用的查询集包括数据库中的所有元素。相同的文档展示了如何通过传递 .none() 创建一个不包含任何现有元素的表单集:

    if request.method == 'POST':  
        formset = ReplyFormSet(request.POST, queryset=Reply.objects.none())
        if formset.is_valid():
            ...
    else:
        formset = ReplyFormSet(queryset=Reply.objects.none())
    

    【讨论】:

    • 我试过用这种方法,但不是这样!现在开始工作了!非常感谢!
    猜你喜欢
    • 2012-08-13
    • 2018-11-30
    • 2011-06-26
    • 1970-01-01
    • 2012-12-22
    • 2016-01-30
    • 2013-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多