Django Form - Validator caused TypeError
Я пытаюсь сделать валидатор даты и времени через regex для данных, поступающих из Django Form. Я не могу понять, почему я получаю 'type' не итерируемый, когда я добавляю валидатор для другого поля.
views.py:
def saveGate(request):
if request.method == 'POST':
form = NewGateForm(request.POST)
# check whether it's valid:
if form.is_valid():
g = Gate()
g.save()
gv = GateVersion()
gv.gateInternalId = g
gv.version = form.cleaned_data['version']
gv.state = form.cleaned_data['state']
gv.toBeReleased = form.cleaned_data['toBeReleased']
ga = GateAtributes()
ga.gateInternalId = g
ga.name = form.cleaned_data['nameOfGate']
ga.description = form.cleaned_data['description']
ga.gateExpression = form.cleaned_data['gateExpression']
ga.type = form.cleaned_data['type']
ga.save()
gv.save()
return HttpResponseRedirect('done/')
else:
return HttpResponse(ValidationError)
else:
raise Http404("Unexpected HTTP method.")
url.py
urlpatterns = [
path('', views.gates, name='gates'),
path('detail/<str:gateInternalId>/', views.gateDetail, name='detail'),
path('new/', views.newGate, name='new'),
path('new/save', views.saveGate, name='save'),
path('edit/', views.editGate, name='edit'),
path('new/done/', views.done, name='done'),
path('new/version/<str:gateInternalId>/', views.newVersion, name="newVersion"),
path('new/version/saveVersion', views.saveVersion, name='saveVersion'),
path('api/gates', views.apiGates)
]
models.py
class GateAtributes(models.Model):
gateInternalId = models.ForeignKey(Gate, on_delete=models.CASCADE)
atributesInternalId = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
name = models.CharField(max_length=500, blank=True)
description = models.CharField(max_length=5000, blank=True)
gateExpression = models.CharField(max_length=150, unique=True, null=False)
SHORT_TERM = 'ST'
LONG_TERM = 'LT'
GATE_TYPE_ENUM = [
(SHORT_TERM, 'Short-term'),
(LONG_TERM, 'Long-term'),
]
type = models.CharField(max_length=2, choices=GATE_TYPE_ENUM, default=SHORT_TERM)
def __str__(self):
return self.name
def __iter__(self):
return [
self.gateInternalId,
self.atributesInternalId,
self.name,
self.description,
self.gateExpression,
self.type
]
forms.py
class NewGateForm(forms.Form):
nameOfGate = forms.CharField(max_length=500,
widget=forms.TextInput(attrs={'class': 'form-control less-marged',
'placeholder': 'Example - Enable new account opening'}))
gateExpression = forms.CharField(max_length=50, widget=forms.TextInput(
attrs={'class': 'form-control less-marged', 'placeholder': 'feature.fundament.description'}))
description = forms.CharField(max_length=5000, widget=forms.TextInput(attrs={'class': 'form-control less-marged',
'placeholder': 'Example - GateAtributes allows user to open another current accoout'}))
state = forms.CharField(widget=forms.RadioSelect(choices=[
(True, 'Zapnuto'),
(False, 'Vypnuto')
]))
type = forms.CharField(widget=forms.RadioSelect(choices=[
('ST', 'Short-term'),
('LT', 'Long-term')
]))
version = forms.CharField(max_length=50, widget=forms.TextInput(
attrs={'class': 'form-control less-marged', 'placeholder': 'Example - V2'}))
now = datetime.now() + timedelta(days=30)
current_time = now.strftime('%d.%m.%Y %H:%M')
toBeReleased = forms.DateTimeField(validators=[
RegexValidator(regex='\d{1,2}.\d{1,2}.\d{4}\s\d{1,2}:\d{2}',
message='Nesprávný formát datumu nebo času.',
code='invalid_format_datetime')],
initial=current_time,
input_formats=['%d.%m.%Y %H:%M'],
widget=forms.DateTimeInput(attrs={'class': 'form-control less-marged',
'placeholder': 'Format - 15.12.2023 10:00'}))
Когда я вызываю http://127.0.0.1:8000/gates/new/save, я получаю следующее сообщение:
Environment:
Request Method: POST
Request URL: http://127.0.0.1:8000/gates/new/save
Django Version: 4.0.6
Python Version: 3.10.5
Installed Applications:
['django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'kbgates.apps.KbgatesConfig']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.midd
leware.clickjacking.XFrameOptionsMiddleware']
Traceback (последний последний вызов): File "C:\Osobni\gates\venv\lib\site-packages\django\core\handlers\exception.py", line 55, in inner response = get_response(request) Файл "C:\Osobni\gates\venv\lib\site-packages\django\core\handlers\base.py", строка 197, in _get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) Файл "C:\Osobni\gates\kbgates\views.py", строка 76, в saveGate return HttpResponse(ValidationError) File "C:\Osobni\gates\venv\lib\site-packages\django\http\response.py", line 355, in init self.content = content Файл "C:\Osobni\gates\venv\lib\site-packages\django\http\response.py", строка 380, in content content = b"".join(self.make_bytes(chunk) for chunk in value)
Тип исключения: TypeError в /gates/new/save Значение исключения: объект 'type' не является итерируемым
Я потратил 2 дня на поиск и гугление, но не нашел никакого решения для устранения проблемы. Если я удаляю валидаторы из form.py - он работает или я не получаю ошибку по крайней мере.
Буду благодарен за любую адекватную помощь. Заранее спасибо.