Python CBV通过带验证的CBV表格
我是django的新手 我正在使用基于类的视图构建CRUD应用程序,如下所示: 视图.pyPython 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
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>