如何拨打以下多个提交表单 -
<form action="/" method="post">
{% csrf_token %}
<input type="text" name="{{ email.id }}" value=" {{email}}"></td>
<td><input type="submit" value="Edit"></td>
<td><input type="submit" value="Delete"></td>
</tr>
</form>
我想做这样的事情 -
if value = edit:
do this
if value = delete:
do this
我如何在views.py文件中对此进行编码?
答案 0 :(得分:34)
为输入类型指定名称,并在request.POST
字典中查找它们。
E.g:
<form action="/" method="post">
{% csrf_token %}
<input type="text" name="{{ email.id }}" value=" {{email}}"></td>
<td><input type="submit" value="Edit" name="_edit"></td>
<td><input type="submit" value="Delete" name="_delete"></td>
</tr>
和views.py之类的内容
if request.POST:
if '_edit' in request.POST:
do_edit()
elif '_delete' in request.POST:
do_delete()
编辑:根据丹尼尔的评论,将d.has_key(k)
更改为k in d
。 has_key
在python 3.0中已弃用,并且首选in样式,因为它更通用 - 如果d不是字典,则d.has_key(k)
会失败,但k in d
适用于任何d
这是一个可迭代的(例如,dict,string,tuple,list,set)。
答案 1 :(得分:8)
我知道很久以前就问过这个问题,但是这里的记录是使用基于类的视图的解决方案。它使用与jimbob博士的答案相同的html。
from django.views.generic.edit import FormView
class MyView(FormView):
template_name = 'mytemplate.html'
form_class = MyForm
def form_valid(self, form):
if '_delete' in self.request.POST:
# do delete
elif '_edit' in self.request.POST:
# do edit
请注意form_valid
的默认行为是:
return HttpResponseRedirect(self.get_success_url())
答案 2 :(得分:4)
您需要为提交按钮指定一个名称属性,例如“动作”,然后您可以在request.POST集合中引用它们:
def my_view(request):
action = request.POST.get('action')
if action == 'Edit':
#do edit
else:
# do delete
希望能帮到你。
答案 3 :(得分:0)
<form action="/" method="post">
<tr>
<td><input type="text" name="{{ email.id }}" value=" {{email}}"></td>
<td><input type="submit" value="Edit" name="submit"> </td>
<td><input type="submit" value="Delete" name="submit"> </td>
</tr>
</form>
views.py将是 -
def our_view(request):
if request.POST.get('submit') == 'Edit':
make_edit()
elif request.POST.get('submit') == 'Delete':
make_deletes()
else:
raise Http404()
答案 4 :(得分:0)
这是使用基于类的视图的解决方案:在您的CreateView和UpdateView中都使用此mixin
class CreateOrUpdateViewMixin:
def form_valid(self, form):
instance = form.save(commit=False)
if "_save_as_new" in self.request.POST:
instance.pk = None
# Next row is optional
instance.slug = instance._generate_unique_slug
self.object = instance
return super().form_valid(form)
并按如下所示填写表格:
<form
action="{{ instance.get_update_url }}"
method="post">
{% csrf_token %}
{{ form.as_p }}
<button
type="submit">
{% trans "Update the instance" %}
</button>
<button
type="submit"
name="_save_as_new">
{% trans "Save as new" %}
</button>
</form>
@Rushing_tadpole表示建议使用基于类的视图。