В форме модели django принимается только двузначный целочисленный массив
Как сделать поле формы, которое принимает двузначный числовой массив во фронтенде. если кто-то вводит более 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
Sample pattern in action:
<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>

