只接受 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()

利用widgetattrs设置一个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>