[英]django - custom field from CharField with default args
I'm trying to use multiple custom fields in my project.我正在尝试在我的项目中使用多个自定义字段。 For example
CurrencyField
.例如
CurrencyField
。 I want to give it a default arguments like verbose_name
- "mena" etc.我想给它一个默认的 arguments,比如
verbose_name
- "mena" 等等。
Django raises error: Django 引发错误:
kwargs['verbose_name'] = kwargs['verbose_name'] or 'Mena'
I guess it's because I sometimes use verbose_name
as a positional argument.我想这是因为我有时使用
verbose_name
作为位置参数。 How can I make it "universal"?我怎样才能使它“通用”?
class CurrencyChoices(models.TextChoices):
EUR = 'EUR'
CHF = 'CHF'
CZK = 'CZK'
DKK = 'DKK'
GBP = 'GBP'
HRK = 'HRK'
HUF = 'HUF'
PLN = 'PLN'
RON = 'RON'
SEK = 'SEK'
USD = 'USD'
class CurrencyField(models.CharField):
def __init__(self, *args, **kwargs):
kwargs['verbose_name'] = kwargs['verbose_name'] or 'Mena'
kwargs['max_length'] = 5
kwargs['choices'] = CurrencyChoices.choices
super().__init__(*args, **kwargs)
If you do not specify the verbose_name
in the constructor, it will raise a KeyError
, you can work with .get(…)
instead, or perhaps even better: .setdefault(…)
:如果您没有在构造函数中指定
verbose_name
,它将引发KeyError
,您可以使用.get(…)
代替,或者甚至更好: .setdefault(…)
:
class CurrencyField(models.CharField):
def __init__(self, *args, **kwargs):
kwargs.setdefault('verbose_name', 'Mena')
kwargs['max_length'] = 5
kwargs['choices'] = CurrencyChoices.choices
super().__init__(*args, **kwargs)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.