簡體   English   中英

Django:列表 object 在 forms.py 中使用驗證器和 RegexValidator 是不可調用的

[英]Django: list object is not callable in forms.py using validators and RegexValidator

我正在嘗試將 RegexValidator 驗證器添加到聯系表單 (forms.py) 以防止垃圾郵件發送者在消息中添加http://https://鏈接。

我在 forms.py 的頂部包含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'^(?!.*\bhttps?\b).+$', message="No http or https allowed", code="invalid")] (
        attrs={'class': 'form-control', 'maxlength': '1000', 'rows': 8} ))

看來我的括號和圓括號是正確的。 是什么導致了錯誤?

Python 3.9, Django 4.0.1


編輯 4/20/22:正則表達式匹配http://https://

首先,我建議使用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
        }
    )
)

現在你看到你有一個()緊跟在[] for validators之后。 這看起來像一個 function 電話。 但這沒有任何意義,因為您不能調用列表,如錯誤所述。

通過使用一致的格式和縮進,您可以輕松避免此類問題。 我上面顯示的格式是許多可用的 styles 之一。 只需選擇一些東西並堅持下去。

要解決此問題,您只需移動代碼以使其正確對齊。 看起來您將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"
        )
    ]
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM