Django Crispy 表单提交按钮

Posted

技术标签:

【中文标题】Django Crispy 表单提交按钮【英文标题】:Django Crispy Form Submit Button 【发布时间】:2017-07-08 23:01:45 【问题描述】:

我正在尝试使用Crispy Forms 使我的表单看起来不错。我的forms.py 中有以下内容:

from django import forms
from .models import Team
from crispy_forms.helper import FormHelper
from crispy_forms.layout import Submit, Layout, Field
from crispy_forms.bootstrap import (
    PrependedText, PrependedAppendedText, FormActions)

class CreateTeamForm(forms.ModelForm):
    class Meta:
        model = Team

        fields = [ 'Project_name', 'Project_number'
                  ]

        helper = FormHelper()
        helper.add_input(Submit('submit', 'Submit', css_class='btn-primary'))

        helper.form_method = 'POST'

然后在我的views.py:

def create_team(request):
    if request.method == 'POST':
        form = CreateTeamForm(request.POST, request.FILES)
        if form.is_valid():
            form.save()
            return render('/teams/my_team.html','')
    else:
        form = CreateTeamForm()

    return render(request, 'teams/team_form.html', 'form':CreateTeamForm())

最后在我的模板中:

% extends "main/base.html" %
% load crispy_forms_tags %
% block content %
    <div class="row">
        <div class="jumbotron">
            % crispy form %

        </div>
    </div>
% endblock %

但是,我调用的提交按钮没有显示。我已经阅读了简陋的表单文档,我似乎找不到我的实现有什么问题。显示除了提交按钮之外的所有内容。有什么想法吗?

【问题讨论】:

【参考方案1】:

您的FormHelper 应该是您的表单类的属性,而不是它的Meta 类。突出代码的那部分:

class CreateTeamForm(forms.ModelForm):
    class Meta:
        model = Team

        fields = [ 'Project_name', 'Project_number' ]

    helper = FormHelper()
    helper.add_input(Submit('submit', 'Submit', css_class='btn-primary'))
    helper.form_method = 'POST'

【讨论】:

【参考方案2】:

这个解决方案对我有用

from django.forms import ModelForm
from crispy_forms.helper import FormHelper
from crispy_forms.layout import Submit

class BillForm(ModelForm):
    def __init__(self, *args, **kwargs):
        super(BillForm, self).__init__(*args, **kwargs)
        self.helper = FormHelper()
        self.helper.add_input(Submit('submit', 'Submit', css_class='btn-primary'))
        self.helper.form_method = 'POST'

    class Meta:
        model = Bill
        fields = ('__all__')

您在 __init__ 方法中按照此示例定义您的助手,然后将其放入您的模板中:

% load crispy_forms_tags %
% crispy form %

在你的观点/行动中,你应该有类似的东西

form = BillForm()

【讨论】:

以上是关于Django Crispy 表单提交按钮的主要内容,如果未能解决你的问题,请参考以下文章

使用Ajax验证并提交Django表单(django-crispy-forms)

django 使用一个提交按钮提交两种不同的表单

确定在 Django 表单提交中单击了哪个提交按钮

带有两个提交按钮的 Django 表单。 . .一个需要字段,一个不需要

Django request.POST 不包含提交表单的按钮的名称

如何在 Django 中访问表单提交按钮的值?