Django: объект list не является вызываемым в forms.py
Я пытаюсь добавить валидатор RegexValidator в контактную форму (forms.py), чтобы предотвратить добавление спамерами ссылок http://
и https://
в сообщение.
Я включил from django.core.validators import RegexValidator
в начало forms.py
.
Этот пример general_message работает нормально, когда не используется валидатор:
general_message = forms.CharField(label='General message*', required=True, widget=forms.Textarea(
attrs={'class': 'form-control', 'maxlength': '1000', 'rows': 8}
))
Но я получаю ошибку 'list’ object is not callable
в примере ниже:
general_message = forms.CharField(label='General message*', required=True, widget=forms.Textarea, validators=[RegexValidator(regex=r'http(s)?|HTTP(s)?', message="No http or https allowed", code="invalid")] (
attrs={'class': 'form-control', 'maxlength': '1000', 'rows': 8} ))
Похоже, что я правильно расставил скобки и круглые скобки. Что вызывает ошибку?
Прежде всего, я предлагаю использовать TextField
вместо CharField
. Общий CharField
предназначен для небольшого фрагмента текста, а TextField
- для большого текста.
Если вы настаиваете на использовании CharField
, вы должны отформатировать эту длинную строку кода таким образом, чтобы можно было понять, что она делает. Например:
general_message = forms.CharField(
label='General message*',
required=True,
widget=forms.Textarea,
validators=[
RegexValidator(
regex=r'http(s)?|HTTP(s)?',
message="No http or https allowed",
code="invalid"
)
]
(
attrs={
'class': 'form-control',
'maxlength': '1000',
'rows': 8
}
)
)
Теперь вы видите, что у вас есть ()
сразу после []
для `validators. Это выглядит как вызов функции. Но это не имеет никакого смысла, поскольку вы не можете вызвать список, как говорит ошибка.
Используя последовательное форматирование и отступы, вы можете легко избежать подобных проблем. Формат, который я показал выше, является одним из многих стилей, которые могут работать. Просто выберите что-то одно и придерживайтесь его.
Чтобы исправить это, вам нужно просто переместить код так, чтобы он выстроился правильно. Похоже, что вы поставили validators
в неправильном месте между Textarea
и ()
для вызова конструктора. Правильный код должен быть таким:
general_message = forms.CharField(
label='General message*',
required=True,
widget=forms.Textarea(
attrs={
'class': 'form-control',
'maxlength': '1000',
'rows': 8
}
),
validators=[
RegexValidator(
regex=r'http(s)?|HTTP(s)?',
message="No http or https allowed",
code="invalid"
)
]
)