Соглашение об именовании полей выбора модели Django - PullRequest
0 голосов
/ 04 июля 2018

Что такое соглашение об именах для имен полей выбора.

class Student(models.Model):
    ACTIVE= 'active'
    INACTIVE= 'inactive'
    NOT_AVAILABLE= 'not-available'
    STATUS_CHOICES = (
        (ACTIVE, 'Active'),
        (INACTIVE, 'Inactive'),
        (NOT_AVAILABLE, 'Not available'),
    )
    status = models.CharField(
        max_length=15,
        choices=STATUS_CHOICES ,
        default=INACTIVE,
    )

Какое соглашение об именах я должен выбрать для поля NOT_AVAILABLE?

недоступен или недоступен

1 Ответ

0 голосов
/ 04 июля 2018

В этих choices нет ничего волшебного. Элементы левого кортежа (назовем их ключами ) хранятся в базе данных, а элементы правого кортежа (назовем их значениями ): отображает с этих значений (таким образом, более удобочитаемое значение).

Идея состоит в том, что значения могут быть культурально-вариантными (например, в зависимости от переводимого языка), тогда как ключи равны инвариант : независимо от настроек ключи обычно всегда одинаковы. Поскольку они хранятся в базе данных, они не обязательно должны быть красивыми, поскольку программист должен понимать, что они означают. Однако, если кто-то и переводит ключи, то это может означать, что после изменения языка сервера Django больше не может интерпретировать строки, содержащие элементы в старом переводе. Поскольку 'active', конечно, не равно 'actief' (нидерландский перевод).

Мой личный совет - использовать здесь подчеркивание, так как тогда это также и идентификатор Python, так что вы можете позже использовать его для операции getattr(..). Например:

getattr(Student, some_student.status.upper())

затем можно использовать для получения STUDENT.NOT_AVAILABLE в случае, если some_student имеет в качестве status строку 'not_available', но, как уже было сказано, могут быть как причины первого, так и второго подхода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...