只接受 django 模型形式的 2 位整数数组
Only accept 2 digits integer array in django model form
如何在前端制作一个接受 2 位数字数组的表单域。如果有人输入超过 2 位数字或字符串,则输入值会自动验证以确保它是格式正确的 2 位整数数组。
对
下面错了
我想要这样的验证:
我的作品
models.py
class Jodi(models.Model):
numb = ArrayField(models.IntegerField(null=True, blank=True), null=True, blank=True)
forms.py
from django import forms
from .models import Jodi
class MyModelForm(forms.ModelForm):
class Meta:
model = Jodi
fields = ['numb',]
views.py
if request.method=='POST':
fm = MyModelForm(request.POST)
if fm.is_valid():
numbers = fm.cleaned_data['numb']
numbers1 = []
for x in numbers:
if x:
numbers1.append(x)
X=Jodi.objects.create(numb=numbers1,)
X.save()
else:
fm = MyModelForm()
return render(request,'myapp/home.html',{'form':fm})
home.html
<form action="" method="post">{% csrf_token %}
{{ form.as_p }}
if fm.is_valid():
numbers = fm.cleaned_data['numb']
for n in numbers.split(','):
if not n.isdigit() or len(n)!=2:
# return render new form with error of not a valid input, input should be 2 digits numbers seprated by comma
X=Jodi.objects.create(numb=numbers1,)
X.save()
利用widget
和attrs
设置一个pattern
表单域。
使用模式 ([0-9]{2})(,\s*[0-9]{2})*
让逗号后有空格或使用 ([0-9]{2})(,[0-9]{2})*
让逗号后没有空格。
使用小部件:
class MyModelForm(forms.ModelForm):
# code
numb = forms.CharField(required=True,widget=forms.TextInput(attrs={'pattern':'([0-9]{2})(,[0-9]{2})*',}))
# code
实际模式示例:
<html !doctype>
<body>
<form action="" method="get">
<label for="number_array">Number Array: </label>
<input type="text"
placeholder="00,11,22"
pattern="([0-9]{2})(,\s*[0-9]{2})*"
autofocus
required>
<button>Go </button>
</form>
</body>
</html>
如何在前端制作一个接受 2 位数字数组的表单域。如果有人输入超过 2 位数字或字符串,则输入值会自动验证以确保它是格式正确的 2 位整数数组。
对
下面错了
我想要这样的验证:
我的作品
models.py
class Jodi(models.Model):
numb = ArrayField(models.IntegerField(null=True, blank=True), null=True, blank=True)
forms.py
from django import forms
from .models import Jodi
class MyModelForm(forms.ModelForm):
class Meta:
model = Jodi
fields = ['numb',]
views.py
if request.method=='POST':
fm = MyModelForm(request.POST)
if fm.is_valid():
numbers = fm.cleaned_data['numb']
numbers1 = []
for x in numbers:
if x:
numbers1.append(x)
X=Jodi.objects.create(numb=numbers1,)
X.save()
else:
fm = MyModelForm()
return render(request,'myapp/home.html',{'form':fm})
home.html
<form action="" method="post">{% csrf_token %}
{{ form.as_p }}
if fm.is_valid():
numbers = fm.cleaned_data['numb']
for n in numbers.split(','):
if not n.isdigit() or len(n)!=2:
# return render new form with error of not a valid input, input should be 2 digits numbers seprated by comma
X=Jodi.objects.create(numb=numbers1,)
X.save()
利用widget
和attrs
设置一个pattern
表单域。
使用模式 ([0-9]{2})(,\s*[0-9]{2})*
让逗号后有空格或使用 ([0-9]{2})(,[0-9]{2})*
让逗号后没有空格。
使用小部件:
class MyModelForm(forms.ModelForm):
# code
numb = forms.CharField(required=True,widget=forms.TextInput(attrs={'pattern':'([0-9]{2})(,[0-9]{2})*',}))
# code
实际模式示例:
<html !doctype>
<body>
<form action="" method="get">
<label for="number_array">Number Array: </label>
<input type="text"
placeholder="00,11,22"
pattern="([0-9]{2})(,\s*[0-9]{2})*"
autofocus
required>
<button>Go </button>
</form>
</body>
</html>