Django:窗体类的自定义构造函数,访问来自请求.POST

2024-10-04 09:30:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我为一个窗体编写了自定义构造函数,整个窗体类如下所示:

class UploadForm(forms.Form):
    file = forms.FileField(label = "Plik")

    def __init__(self, coto, naglowek, *args, **kwargs):
        super(UploadForm, self).__init__(*args, **kwargs)
        self.coto = coto
        self.naglowek = naglowek

在我看来,当提交表单时,我有一些

^{pr2}$

问题是,在我看来,当我以这种方式创造形式时,我没有通过科托和纳格洛夫,所以当我打电话给表格有效吗()-->它返回false。在

经过的模板如下所示:

<table class="uploadform">
<form action="." method="POST" enctype="multipart/form-data">
{% for form in forms %} 
<tr>
    <td>{{ form.naglowek }}</td>
    <td>{{ form.file }}</td>
    <td><input type="submit" name="{{ form.coto }}" id="{{ form.coto }}" value="Wyślij"></td>
</tr>
{% endfor %}
</form>
</table>

如有任何建议,我将不胜感激。在

[编辑] 我可能说得不够清楚,但我会尽力:

当我提交这个表单时,在视图中,我需要知道是哪个提交按钮被按下的-我有很多被分配到一个表单。据我所知,当我给提交按钮分配id时,它应该在post中可用,对吗?诀窍是,它是不可用的。在

我有两个问题: *如果我想知道按下了哪个提交按钮,需要做些什么?指定名字是唯一的方法吗? *我的逻辑有错误吗?在


Tags: selfform表单initargsforms窗体按钮
3条回答

你的问题一团糟。有代码,还有另一个问题的编辑。编辑问题与标题无关。在

请更新你的问题。在

如果有多个提交按钮,则必须为它们提供不同的名称或值(或两者都有)。下面是我们的代码,它使用不同的值来区分单击了哪个按钮。在

        <form method="post" action="." enctype="multipart/form-data">
            <input type="hidden" name="object_id" value="{{e.id}}"/>
            {% ifequal object.workflow "uploaded" %}
            <input type="submit" name="action" value="Validate"/>
            <br/>
            <input type="submit" name="action" value="Delete"/>
            {% endifequal %}
            {% ifequal object.workflow "validated" %}
            <input type="submit" name="action" value="Load"/>
            {% endifequal %}
            {% ifequal object.workflow "processed" %}
            <input type="submit" name="action" value="Undo"/>
            {% endifequal %}
            {% ifequal object.workflow "failed" %}
            <input type="submit" name="action" value="Validate"/>
            {% endifequal %}
        </form>

view函数有这样的功能:

^{pr2}$

根据按钮更改操作。在

您已经重新定义了默认表单构造函数并更改了其参数顺序。因此,您必须用显式的参数命名来实例化自定义窗体:

form = UploadForm(data=request.POST, files=request.FILES, coto=..., naglowek=...)
request.POST['coto']
request.POST['naglowek']

我想是吧。在

相关问题 更多 >