【问题标题】:How Can I display a form or formset based on the submissions of a Post - Django?如何根据帖子的提交显示表单或表单集 - Django?
【发布时间】:2014-06-13 05:40:07
【问题描述】:

请有人告诉我哪里出错了。我想要做的是让用户输入他们想要的产品数量,并在提交时,如果该数量大于 0,则显示一个等于数量的表单。有多个产品,所以我使用 if 语句来说明帖子在哪里有这个产品名称,显示这个表格。我得到的结果只是发送过来的最后一个产品的表格。所以在 [eggs, ham] 的列表中,我只得到了 ham 的表格。如果可能,请帮忙,这是我下面的代码。

查看:

 if request.method =='POST':
    session = request.session._session_key
    formtype = request.POST.getlist('name')

    i = 0

    while i < len(formtype):
        for f in formtype:
            if f == 'eggs':
                 item = CompReg.objects.get(sessionid = session, name='eggs')
                 extra = item.quantity
                 listmemformset = modelformset_factory(ProBachata, form=ProBachataF,extra=extra)
                 formset = listmemformset()
            elif f == 'ham':
                 item = CompReg.objects.get(sessionid = session, name='ham')
                 extra = item.quantity
                 listmemformset = modelformset_factory(ProBachata, form=ProBachataF,extra=extra)
                 formset = listmemformset()
        i += 1

 else:
    extra = 0

模板:

  {{formset.as_p}}

【问题讨论】:

  • 因为每次重新设置formset,所以它成为列表中的最后一个。我认为您必须使用“formset 列表”之类的内容,然后在模板中对其进行迭代。
  • 我对 python 还很陌生,您能详细说明一下吗?

标签: django formset


【解决方案1】:

实际上我并没有完全理解你的代码(为什么使用 while,为什么你从 db 中获取 item.quantity,数量不能在 POST 数据中?),但是你的代码可能是这样的;

if request.method =='POST':
    session = request.session._session_key
    formtype = request.POST.getlist('name')

    formsets = []
    for f in formtype:
        if f == 'eggs':
            item = CompReg.objects.get(sessionid=session, name='eggs')
        elif f == 'ham':
            item = CompReg.objects.get(sessionid=session, name='ham')

        extra = item.quantity
        listmemformset = modelformset_factory(ProBachata, form=ProBachataF, extra=extra)
        formset = {'name': f, 'form':listmemformset()}
        formsets.append(formset)
else:
    extra = 0

模板:

{% for formset in formsets %}
name: {{formset.name}}
{{formset.form.as_p}}
{% endfor %}

【讨论】:

  • 好吧,这非常接近,我取出了 if 语句,因为它不能正常工作。然后我只为 item 留下了一个查询集,并将 name = 'eggs' 替换为 name = f。它现在正在打印正确数量的表格,我只需要它在表格中打印正确的名称。 - 它只给了我字典中的姓氏,但给了我正确数量的表格。
  • 非常感谢,非常感谢!
猜你喜欢
  • 1970-01-01
  • 2011-10-20
  • 1970-01-01
  • 2015-06-28
  • 2018-02-09
  • 2017-06-11
  • 2013-01-17
  • 2017-08-30
  • 2016-03-08
相关资源
最近更新 更多