You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django中单个表单内能否创建两个功能不同的submit提交按钮?

完全可以实现,以下是两种常用的实现方案:

方案1:前端JS实现(适合简单修改逻辑)
  • 先给表单的两个提交按钮设置不同的标识,给需要修改后提交的按钮绑定点击事件,修改字段值后再提交表单。

模板代码示例:

<form method="post" id="target-form">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit" name="action" value="normal">按钮A(正常提交)</button>
    <button type="submit" name="action" value="modify" id="modify-btn">按钮B(修改后提交)</button>
</form>

JS逻辑示例:

document.querySelector('#modify-btn').addEventListener('click', function(e) {
    e.preventDefault();
    const nameField = document.querySelector('input[name="name"]');
    nameField.value = `${nameField.value}@gmail.com`;
    document.querySelector('#target-form').submit();
})
方案2:后端处理(更安全,适合复杂逻辑)

无需修改前端JS,只需要后端区分按钮类型后处理字段值即可,可靠性更高。

模板代码和方案1的模板一致,不需要额外引入JS。

视图层处理示例:

from django.shortcuts import render, redirect
from .forms import CustomModelForm

def form_handle_view(request):
    if request.method == 'POST':
        form = CustomModelForm(request.POST)
        if form.is_valid():
            action = request.POST.get('action')
            obj = form.save(commit=False)
            # 区分按钮类型做处理
            if action == 'modify':
                obj.name = f"{obj.name}@gmail.com"
            obj.save()
            return redirect('success_route')
    else:
        form = CustomModelForm()
    return render(request, 'form.html', {'form': form})

你也可以选择在自定义Form的clean方法中做处理,逻辑和视图层类似:

from django import forms
from .models import YourModel

class CustomModelForm(forms.ModelForm):
    class Meta:
        model = YourModel
        fields = ['name']

    def clean(self):
        cleaned_data = super().clean()
        action = self.data.get('action')
        if action == 'modify':
            cleaned_data['name'] = f"{cleaned_data['name']}@gmail.com"
        return cleaned_data

注意:两种方案都需要给按钮设置相同的name属性、不同的value属性,方便后端识别点击的按钮类型。

内容的提问来源于stack exchange,提问作者Ryan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 10:48:02