Django model field contain strange attribute _(“private”)

佐手、 提交于 2020-11-29 10:25:52

问题


Currently I have been learning Django and while reading, I have come across the below code block which I don't understand.

private = models.BooleanField(
        _('private'),
        default=False,
        help_text=_('theme is available ONLY for the site.'),
    )

The above line of code contains _('private') and I am not able to understand what it does. I know about using _ for translation-related stuff. Why attribute name not declared for _("private")?

I have tried to find the answer online but have been unable.

Thanks.


回答1:


As you can see in the source code of Django, the constructor of a Field (which BooleanField inherits) takes verbose_name as first positional argument. So, your first argument (_('private')) will be affected to verbose_name.

However, to make your code clearer, I would recommend to pass it as a keyword argument:

private = models.BooleanField(
    verbose_name=_('private'),
    default=False,
    help_text=_('theme is available ONLY for the site.'),
)

Using keyword argument for verbose_name will make it clearer for you and people reading your code, especially since Django documentation does not give the order of positional arguments. Using positional argument forces readers to read Django source code to know what it is.

When you use keyword arguments, you can position your arguments as you like, so this code will work the same:

private = models.BooleanField(
    help_text=_('theme is available ONLY for the site.'),
    verbose_name=_('private'),
    default=False,
)



回答2:


_('private') sets the attribute verbose_name.

The leading underscore is the commonly used function alias for the one of the ugettext functions used by the internationalization (i18n) mechanics.

It means that when you have i18n running, the labels will be translated into the appropriate end-user language, if a translation is available.

Check this answer: https://stackoverflow.com/a/2964256/9361129



来源:https://stackoverflow.com/questions/64752145/django-model-field-contain-strange-attribute-private

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!