python - Django - 如何只返回表单验证消息而不是表单本身?
问题描述
在 Django 学习项目中,我只想将自定义验证消息作为列表或元组返回。但是我在网上找到的几乎所有教程都使用了 Form 类,几乎类似于以下代码:
def save(request):
if request.method == "POST":
form = RegistrationForm( request.POST )
if form.is_valid():
# save employee
return redirect('index')
else:
form = RegistrationForm()
return render(request, 'form.html', {'form': form})
其中RegistrationForm包含以下代码:
from django import forms
class RegistrationForm(forms.Form):
first_name = forms.CharField(min_length=4)
last_name = forms.CharField(required=False)
email = forms.EmailField()
contact_no = forms.CharField(min_length=11)
gender = forms.CharField(min_length=4)
此验证有效,它返回包含所有验证消息的表单。但我想要的是:我想返回验证消息,而不是表单本身。我在 Django 中很新,所以我想不出一种合适的方式(如果有的话)如何将验证消息作为列表或元组返回,而不是作为表单对象。
任何人都可以帮助解决这个问题吗?
解决方案
这是使用自定义表单验证错误的示例
首先创建你的模型
模型.py:
from django.db import models
class RegistrationModel(models.Model):
first_name = models.CharField(max_length=150)
last_name = models.CharField(max_length=150)
phone_number = models.IntegerField(max_digits=11)
表格.py:
from django import forms
class RegistrationModelForm(forms.ModelForm):
class Meta:
model = RegistrationModel
fields = ('first_name', 'last_name', 'phone_number')
widgets = {
'first_name': forms.TextInput(attrs={'placeholder': 'first name'}),
'last_name': forms.TextInput(attrs={'placeholder': 'last name'}),
'phone_number': forms.TextInput(attrs={'placeholder': 'phone number'}),
}
def clean(self):
super(RegistrationModelForm, self).clean()
first_name = self.cleaned_data.get('first_name')
last_name = self.cleaned_data.get('last_name')
phone_number = self.cleaned_data.get('phone_number')
if len(first_name) < 10:
self._errors['first_name'] = self.error_class(
['first name must be 10 characters at least'])
if len(last_name) < 10:
self._errors['last_name'] = self.error_class(
['last name must be 10 characters at least'])
if len(phone_number) < 11:
self._errors['phone_number'] = self.error_class(
['phone number must be 11 digits at least'])
return self.cleaned_data
终于在你看来
视图.py:
from django.contrib import messages
if RegistrationModelForm.is_valid():
# do something
else:
messages.warning(request, form.errors)
推荐阅读
- ruby - 如何编写一个函数,通过共享字母将每个前一个单词连接到下一个单词
- file-upload - 如何在 WildFly 中设置 Undertow MAX_ENTITY_SIZE
- shared-libraries - 我正在尝试编辑一个 arduino 库。有人可以为我解释这段代码吗
- c++11 - C++ 我们可以在普通用户定义数据类型上使用哪些原子操作
- python - 如何在图像上添加文字并调整图像?(不使用魔杖)
- php - 从 Wordpress 网站中删除分页
- c# - 尝试在方法中执行sql查询并在.net视图上查看
- javascript - 导出函数返回未定义
- python - 如何在 tkinter 中停止重叠画布图像
- reactjs - Redux Toolkit:有两个连续的dispatch,后者依赖于前者