Django - пользовательское поле из CharField с параметрами по умолчанию
Я пытаюсь использовать несколько пользовательских полей в своем проекте. Например, CurrencyField.
Я хочу дать ему аргументы по умолчанию, например verbose_name - "mena" и т.д.
Django выдает ошибку:
kwargs['verbose_name'] = kwargs['verbose_name'] or 'Mena'
Наверное, это потому, что я иногда использую verbose_name в качестве позиционного аргумента. Как я могу сделать его "универсальным"?
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)
Если вы не укажете 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)