代码之家  ›  专栏  ›  技术社区  ›  Milano

django-CharField中带有默认参数的自定义字段

  •  1
  • Milano  · 技术社区  · 4 年前

    我试图在我的项目中使用多个自定义字段。例如 CurrencyField . 我想给它一个默认参数,比如 verbose_name -“中东和北非”等。

    Django引发错误:

    kwargs['verbose_name'] = kwargs['verbose_name'] or 'Mena'
    

    我想这是因为我有时用 冗长的名字 作为一个位置论点。我怎样才能让它“通用”?

    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)
    
    1 回复  |  直到 4 年前
        1
  •  2
  •   willeM_ Van Onsem    4 年前

    如果不指定 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)
    推荐文章