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 - он работает или я не получаю ошибку по крайней мере.

Буду благодарен за любую адекватную помощь. Заранее спасибо.

Вернуться на верх