Python CBV通过带验证的CBV表格

Python CBV通过带验证的CBV表格,python,django,forms,materialize,Python,Django,Forms,Materialize,我是django的新手 我正在使用基于类的视图构建CRUD应用程序,如下所示: 视图.py class CreateInterventionView(CreateView): form_class = NewIntervention success_url = reverse_lazy('list') template_name = 'intervention_create.html' def form_valid(self, form): for

我是django的新手

我正在使用基于类的视图构建CRUD应用程序,如下所示:

视图.py

class CreateInterventionView(CreateView):
    form_class = NewIntervention
    success_url = reverse_lazy('list')
    template_name = 'intervention_create.html'

    def form_valid(self, form):
       form.instance.speaker = self.request.user
       return super().form_valid(form)

class UpdateInterventionView(LoginRequiredMixin, UserPassesTestMixin, UpdateView):
    model = Intervention
    form_class = NewIntervention
    success_url = reverse_lazy('list')
    template_name = 'intervention_update.html'

    def form_valid(self, form):
        form.instance.speaker = self.request.user
        return super().form_valid(form)

    def test_func(self):
        post = self.get_object()
        if self.request.user == post.speaker:
           return True
        return False

class DeleteInterventionView(DeleteView):
    model = Intervention
    template_name = 'intervention_delete.html'
    context_object = 'intervention'
    success_url = reverse_lazy('list')
forms.py

class CreateInterventionView(CreateView):
    form_class = NewIntervention
    success_url = reverse_lazy('list')
    template_name = 'intervention_create.html'

    def form_valid(self, form):
       form.instance.speaker = self.request.user
       return super().form_valid(form)

class UpdateInterventionView(LoginRequiredMixin, UserPassesTestMixin, UpdateView):
    model = Intervention
    form_class = NewIntervention
    success_url = reverse_lazy('list')
    template_name = 'intervention_update.html'

    def form_valid(self, form):
        form.instance.speaker = self.request.user
        return super().form_valid(form)

    def test_func(self):
        post = self.get_object()
        if self.request.user == post.speaker:
           return True
        return False

class DeleteInterventionView(DeleteView):
    model = Intervention
    template_name = 'intervention_delete.html'
    context_object = 'intervention'
    success_url = reverse_lazy('list')
模式正在工作,我的表单在其中,但当我创建新的干预时,它不工作,我不知道如何在我的listview中进行验证

欢迎任何建议。 非常感谢


致以最诚挚的问候。

这里的问题是,您没有
clean
方法中返回
cleaned\u数据:

class NewIntervention(forms.ModelForm):
    # ...
    def clean(self):
        cleaned_data = super().clean()
        begin_date = cleaned_data.get("begin_date")
        end_date = cleaned_data.get("end_date")
        if end_date < begin_date:
            raise forms.ValidationError("End date should be greater than start date.")
        return cleaned_data
然后,您需要将表单的
操作更改为:

    <!-- Modal Trigger -->
  <a class="waves-effect waves-light btn modal-trigger" href="#modal1">Modal</a>
  <!-- Modal Structure -->
  <div id="modal1" class="modal">
    <div class="modal-content">
      <form method="post" action="{% url 'new-intervention' %}">
        {% csrf_token %}
        {{ form.as_p }}
        <button class="btn modal-close waves-effect waves-light" type="submit" name="action">Submit
          <i class="material-icons right">send</i>
        </button>
      </form>   
     </div>
  </div>

{%csrf_令牌%}
{{form.as_p}}
提交
发送

欢迎来到SO。你说它不起作用是什么意思?验证失败了吗?有什么错误吗?同时向我们展示您的
NewIntervention
表单以及添加新
Intervention
的模式。没有错误,并且当我提交表单时,管理/数据库中没有任何内容。我仍然坚持在模式中删除/更新。对于delete,我将pk传递给delete url,如{%csrf_token%}它将删除但不是正确的项。你知道吗?为了更新,我收到了我的表格,但上面没有填写日期objece@cameleon请编辑您的问题并将代码放在那里。有没有出现任何错误?
class NewIntervention(forms.ModelForm):
    # ...
    def clean(self):
        cleaned_data = super().clean()
        begin_date = cleaned_data.get("begin_date")
        end_date = cleaned_data.get("end_date")
        if end_date < begin_date:
            raise forms.ValidationError("End date should be greater than start date.")
        return cleaned_data
...
path('intervention/new/', CreateInterventionView.as_view(), name='new-intervention'),
...
    <!-- Modal Trigger -->
  <a class="waves-effect waves-light btn modal-trigger" href="#modal1">Modal</a>
  <!-- Modal Structure -->
  <div id="modal1" class="modal">
    <div class="modal-content">
      <form method="post" action="{% url 'new-intervention' %}">
        {% csrf_token %}
        {{ form.as_p }}
        <button class="btn modal-close waves-effect waves-light" type="submit" name="action">Submit
          <i class="material-icons right">send</i>
        </button>
      </form>   
     </div>
  </div>