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