Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django:表单类的自定义构造函数,从request.POST访问数据时遇到问题_Python_Django_Post_Webforms - Fatal编程技术网

Python Django:表单类的自定义构造函数,从request.POST访问数据时遇到问题

Python Django:表单类的自定义构造函数,从request.POST访问数据时遇到问题,python,django,post,webforms,Python,Django,Post,Webforms,我已经为表单编写了自定义构造函数,整个表单类如下所示: 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

我已经为表单编写了自定义构造函数,整个表单类如下所示:

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
在我看来,在提交表单时

if request.method == 'POST':
    form = UploadForm(request.POST, request.FILES)
    if form.is_valid():
        add_form(request.FILES['file'])
        return HttpResponseRedirect('uploaded/')
问题是,在我看来,当我以这种方式创建表单时,我没有经过coto和naglowek,所以当我调用form.is_valid->时,它返回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中使用,对吗?诀窍在于,它是不可用的

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

request.POST['coto']
request.POST['naglowek']

我猜。

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

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

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

请将此问题更新为您真正的问题

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

        <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>

更改基于按钮的操作。

我尝试过,但不起作用。我可能在什么地方弄糟了这个,但我不知道在哪里。谢谢你的帮助。也许你可以检查一下你的html,看看实际提交的是什么?它不起作用,我的意思是,我在中找不到错误码“coto”,请把你的实际错误消息和回溯放在问题中。Alex,我知道我重新定义了参数顺序——这里的诀窍是我无法访问PostDictionary中的“coto”和“naglowek”。
            if request.POST['action'] == "Delete":