Django表单未提交且未引发错误

Django表单未提交且未引发错误,django,django-forms,django-views,Django,Django Forms,Django Views,下面是我在my views.py中的代码。我有一个正在创建和预填充的FormView,但是当我提交它时,它不会转到form_valid(),当它转到form_invalid()时,它不会打印出任何错误 非常感谢您的帮助 views.py class CleanTeamMainContactView(LoginRequiredMixin, FormView): template_name = "cleanteams/main_contact.html" form_class = E

下面是我在my views.py中的代码。我有一个正在创建和预填充的FormView,但是当我提交它时,它不会转到form_valid(),当它转到form_invalid()时,它不会打印出任何错误

非常感谢您的帮助

views.py

class CleanTeamMainContactView(LoginRequiredMixin, FormView):
    template_name = "cleanteams/main_contact.html"
    form_class = EditCleanTeamMainContact
    success_url = "mycleancity/index.html"

    def get_initial(self, clean_team_member):
        initial = {}

        if clean_team_member:
            clean_team = clean_team_member.clean_team
            contact_user = clean_team.contact_user

            initial['contact_first_name'] = contact_user.first_name
            initial['contact_last_name'] = contact_user.last_name
            initial['contact_email'] = contact_user.email
            initial['contact_phone'] = clean_team.contact_phone
            initial['clean_ambassadors'] = clean_team.contact_user.id
            initial['clean_team_id'] = clean_team.id

        return initial

    # Initialize the form with initial values
    def get_form(self, form_class): 
        clean_team_member = self.request.user.profile.clean_team_member

        return form_class(
            clean_team=clean_team_member.clean_team,
            initial=self.get_initial(clean_team_member)
        )

    def form_invalid(self, form, **kwargs):
        context = self.get_context_data(**kwargs)
        context['form'] = form

        print form.errors
        return self.render_to_response(context)

    def form_valid(self, form):
        clean_team_id = form.cleaned_data['clean_team_id']

        try:
            clean_team_member =     CleanTeamMember.objects.get(user=self.request.user)
            clean_team_member.clean_team.update_main_contact(form.cleaned_data)
        except Exception, e:
            print e

        return HttpResponseRedirect(u'/clean-team/%s' %(clean_team_id))
forms.py

class EditCleanTeamMainContact(forms.Form):
    # clean_ambassadors = forms.ChoiceField(required=True, label="Clean ambassadors")
    contact_first_name = forms.CharField(required=False, max_length = 128, min_length = 2, widget=forms.TextInput(attrs={'readonly':'readonly'}), label="First name")
    contact_last_name = forms.CharField(required=False, max_length = 128, min_length = 2, widget=forms.TextInput(attrs={'readonly':'readonly'}), label="Last name")
    contact_phone = forms.CharField(required=False, max_length = 128, min_length = 2, widget=forms.TextInput(attrs={'class':'phone-number'}), label="Phone number")
    contact_email = forms.CharField(required=False, max_length = 128, min_length = 2, widget=forms.TextInput(attrs={'readonly':'readonly'}), label="Email address")
    clean_team_id = forms.CharField(required=False, widget=forms.HiddenInput())

    def __init__(self, clean_team=None, *args, **kwargs):
        super(EditCleanTeamMainContact, self).__init__(*args, **kwargs)

        print clean_team
        # Prepopulate the Clean Ambassador drop down
        ctm_queryset = CleanTeamMember.objects.filter(clean_team=clean_team)
        self.fields["clean_ambassadors"] = forms.ChoiceField(label="Clean Ambassadors", widget=None, choices=[(o.user.id, str(o.user.profile.get_full_name())) for o in ctm_queryset])

        print self.fields["clean_ambassadors"].choices

    def clean(self):
        cleaned_data = super(EditCleanTeamMainContact, self).clean()

        contact_phone = cleaned_data.get("contact_phone")

        if not contact_phone:
            raise forms.ValidationError("Please enter a contact phone number")

        return cleaned_data
main_contact.html

{% extends '_public_base.html' %}

{% block title %} My Clean City - Main Contact {% endblock %}

{% block css %}
  <link href="{{ STATIC_URL }}css/mycleancity.css" rel="stylesheet">
{% endblock %}

{% block content %}

<div class="wrapper public">
  <div class="clouds"></div>

  {% include "_loggedin_navbar.html" %}

  <a href="/" class="logo"></a>

  <div class="content">
    <div class="container">
      <a href="#" onclick="history.go(-1); return false;"><div class="sign register" id="sign-go-back"></div></a>
      <div id="white-box" class="small main-contact">
          <h2>Main Contact for {{ user.profile.clean_team_member.clean_team.name }}</h2>
          <span class="subtitle">Select one of the Clean Ambassadors to set them as the primary contact. If their information is incorrect, have them update their information by logging in and going to Edit Profile.</span>

          {% if form.non_field_errors %}
            <div class="message-box error">
            {{ form.non_field_errors }}
            </div>
          {% endif %}

          <form action="" method="post" enctype="multipart/form-data">{% csrf_token %}
            {{ form.clean_team_id }}

            <table>
                <tr>
                  <td colspan="2">{{ form.clean_ambassadors.label_tag }} {{ form.clean_ambassadors }}</td>
                </tr>
                <tr>
                    <td>{{ form.contact_first_name.label_tag }} {{ form.contact_first_name }}</td>
                    <td>{{ form.contact_last_name.label_tag }} {{ form.contact_last_name }}</td>
                </tr>
                <tr>
                    <td>{{ form.contact_email.label_tag }} {{ form.contact_email }}</td>
                    <td>{{ form.contact_phone.label_tag }} {{ form.contact_phone }}</td>
                </tr>
            </table>

            <input class="btn btn-primary" type="submit" value="Update Main Contact" />
          </form>
      </div><!-- /#white-box -->
    </div><!-- /.container -->
  </div><!-- /.about -->
</div> <!-- /.wrapper -->
{% include "_footer_navbar.html" %}

{% endblock %}

{% block javascript %}{% endblock %}
{%extends'\u public\u base.html%}
{%block title%}我的清洁城市-主要联系人{%endblock%}
{%block-css%}
{%endblock%}
{%block content%}
{%包括“\u loggedin\u navbar.html”%}
{{user.profile.clean_team_member.clean_team.name}的主要联系人
选择一名清洁大使,将其设置为主要联系人。如果他们的信息不正确,请让他们通过登录并进入编辑配置文件来更新信息。
{%if form.non_字段_错误%}
{{form.non_field_errors}}
{%endif%}
{%csrf_令牌%}
{{form.clean_team_id}
{{form.clean_ambassadors.label_tag}{{{form.clean_ambassadors}}
{{form.contact_first_name.label_tag}{{form.contact_first_name}}
{{form.contact_last_name.label_tag}{{form.contact_last_name}}
{{form.contact_email.label_tag}{{{form.contact_email}}
{{form.contact_phone.label_tag}{{{form.contact_phone}}
{%包括“\u footer\u navbar.html”%}
{%endblock%}
{%block javascript%}{%endblock%}

我认为没有将数据提供给表单的原因是您重写了
get\u form
方法,而没有将
请求传递给它。POST
数据。我认为与其重写该方法,不如重写
get\u form\u kwargs
方法

class CleanTeamMainContactView(LoginRequiredMixin, FormView):
    template_name = "cleanteams/main_contact.html"
    form_class = EditCleanTeamMainContact
    success_url = "mycleancity/index.html"

    def get_initial(self, clean_team_member):
        ...

    def get_form_kwargs(self):
        clean_team_member = self.request.user.profile.clean_team_member
        kwargs = {
            "initial": self.get_initial(clean_team_member),
            "clean_team": clean_team_member.clean_team
        }
        if self.request.method in ("POST", "PUT"):
            kwargs.update({
                "data": self.request.POST,
                "files": self.request.FILES
            })
        return kwargs

    def form_invalid(self, form, **kwargs):
        ...

    def form_valid(self, form):
        ...

这将有望解决空的
表单。数据
问题,但我不确定表单是否仍然无效。

请发布您的
表单
,如果它是
模型表单
,您的
模型
?我已经添加了forms.py文件。我在代码中找不到任何问题。您是否检查了post数据以查看它是否符合预期?问题是它只会形成_invalid(),没有错误消息。不幸的是,我甚至无法检查数据是否已发布。当然,除非我遗漏了什么。如果它进入了is_无效函数,那么你肯定是在写帖子。尝试打印form.data或form.u数据