Django FormField如何在自定义字段基类中设置max_length等属性
通用化IBANField实现方案
你可以通过重写自定义IBANField的初始化方法,把通用的max_length、label默认值内置到字段类中,同时保留原有参数的可覆盖能力,避免每次使用时重复配置:
from django.forms import CharField from django.utils.translation import gettext_lazy as _ # 你自定义的IBAN校验函数,原有逻辑保留即可 def validate_iban(value): # 原有校验逻辑 pass class IBANField(CharField): default_validators = [validate_iban] def __init__(self, *args, **kwargs): # 内置通用默认配置,优先级低于外部传入的参数 kwargs.setdefault('max_length', 34) kwargs.setdefault('label', _('IBAN')) super().__init__(*args, **kwargs)
改造完成后你就可以直接复用该字段,无需每次重复传公共参数:
class SepaForm(forms.Form): iban = IBANField()
如果遇到特殊场景需要修改默认配置,直接传参即可覆盖默认值:
# 自定义参数示例 class CustomForm(forms.Form): iban = IBANField(label=_('欧洲银行账户IBAN'), max_length=40)
内容的提问来源于stack exchange,提问作者tuergeist
相关产品推荐
相关产品推荐

