在django中引用多个提交按钮
我如何调用以下多个提交表单--在django中引用多个提交按钮,django,Django,我如何调用以下多个提交表单-- 如何在views.py文件中对其进行编码?您需要为提交按钮提供名称属性,例如说“操作”,然后您可以在request.POST集合中引用它们: def my_view(request): action = request.POST.get('action') if action == 'Edit': #do edit else: # do delete 希望这对您有所帮助。为输入类型命名,并在您的请求中查找它
如何在views.py文件中对其进行编码?您需要为提交按钮提供名称属性,例如说“操作”,然后您可以在request.POST集合中引用它们:
def my_view(request):
action = request.POST.get('action')
if action == 'Edit':
#do edit
else:
# do delete
希望这对您有所帮助。为输入类型命名,并在您的
请求中查找它们。发布字典
例如:
编辑:根据Daniel的评论,将d.has_key(k)
更改为d中的k<在python 3.0中,code>has_key
不受欢迎,而in样式更受欢迎,因为它更通用——特别是d.has_key(k)
如果d不是字典,则会失败,但k in d
适用于任何iterable(例如,dict、string、tuple、list、set)的,但是这里有一个使用基于类的视图的解决方案。它使用与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\u valid
的默认行为是:
return HttpResponseRedirect(self.get_success_url())
下面是一个使用基于类的视图的解决方案:在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>
{%csrf_令牌%}
{{form.as_p}}
{%trans“更新实例”%}
{%trans“另存为新”%}
感谢@Rushing\u tadpole建议使用基于类的视图。foo.has\u key('bar'))
自Python 2.4以来,在foo中被拼写为'bar'。丹尼尔:谢谢——编辑后解释了为什么d中的k
是首选,因为它适用于任何适合的d。请记住,如果表单中有多个提交按钮,并且用户按Enter键,然后,它将自动单击HTML中最先出现的按钮。@stevejalim-是,如果有
字段,并且用户按enter键,则默认情况下将发送第一个输入类型=提交。但是您可以使用一些javascript来禁用此行为。例如,这对我处理脆表单不起作用。我认为这不起作用。查看您的请求。发布词典。它将由类似于{'3':'example@example.com“,”编辑“:”编辑“}
。正如您无法通过从请求.POST
获取'text'
来引用电子邮件地址一样,您需要提供输入按钮的名称以获取其值。在标题更改(例如国际化)后将中断。但是将使用
s。我在form.data:form.instance.field=special_值中使用了if“key”
<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>
def our_view(request):
if request.POST.get('submit') == 'Edit':
make_edit()
elif request.POST.get('submit') == 'Delete':
make_deletes()
else:
raise Http404()
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
return HttpResponseRedirect(self.get_success_url())
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>