首页 > 解决方案 > 如何禁止按钮在 Django 中提交表单?

问题描述

我的 django 站点表单中有两个按钮,第一个按钮应该只调用 javscript 函数,第二个按钮应该提交表单。

<form method="POST" enctype="multipart/form-data">
     {% csrf_token %}
     {{ form.title|as_crispy_field }}
     <br/>
     {{ form.body|as_crispy_field }}
     <button class="btn mt-3" onclick="insertText('HELLO')">Insert Text</button>
     <br/>
     <button class="btn btn-success mt-3" >Submit!</button>
 </form>

我的“views.py”文件包含此页面的以下代码:

class Posts(View):
    def get(self, request, *args, **kwargs):
        form = PostForm()
        posts = Post.objects.all().order_by('-publish_date')
        context = {
            'form': form,
            'posts': posts
        }

        return render(request, 'posts/view_posts.html', context)

    def post(self, request, *args, **kwargs):
        form = PostForm(request.POST, request.FILES)

        if form.is_valid():
            new_post = form.save(commit=False)
            new_post.publisher = request.user
            new_post.save()
            form = PostForm() 

        return redirect('view-posts')

我的问题是应该只调用 javascript 函数的第一个按钮也在发出 POST 请求并提交表单。

这个问题有什么解决办法吗?

标签: djangodjango-forms

解决方案


您可以将按钮命名为

<form method="POST" enctype="multipart/form-data">
     {% csrf_token %}
     {{ form.title|as_crispy_field }}
     <br/>
     {{ form.body|as_crispy_field }}
     <button class="btn mt-3" onclick="insertText('HELLO')" name="not_save_button">Insert Text</button>
     <br/>
     <button class="btn btn-success mt-3" name="save_button">Submit!</button>
 </form>

并在您的观点的发布方法中:

def post(self, request, *args, **kwargs):
        form = PostForm(request.POST, request.FILES)

        if form.is_valid() and 'save_button' in request.POST:
            new_post = form.save(commit=False)
            new_post.publisher = request.user
            new_post.save()
            form = PostForm() 

        return redirect('view-posts')

推荐阅读