Django 模型选择字段命名约定

Django model choice field naming convention

选择字段名称的命名约定是什么。

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 字段选择什么命名约定?

不可用not_available

这些 choices 没有什么神奇之处。左元组项(让我们称它们为 keys)存储在 in 数据库中,而右元组项(让我们称它们为 values) 是这些值的 display(因此更易于阅读)。

想法是 values 可以是 culture-variant(例如,取决于翻译的语言),而 keys are invariant:无论设置如何,键通常总是相同的。由于这些存储在数据库中,因此不必非常漂亮,因为程序员应该能够理解它们的含义。但是,如果有人也翻译键,那么这可能意味着在更改服务器的语言之后,Django 不能再解释 包含旧翻译项的行。因为'active'当然不等于'actief'(荷兰语翻译)。

我个人的建议是在这里使用下划线,因为它也是一个 Python 标识符,因此您可以稍后将其用于 getattr(..) 操作。例如:

getattr(Student, some_student.status.upper())
如果 some_student 具有 status 'not_available' 字符串,则

可用于获取 STUDENT.NOT_AVAILABLE,但如前所述,可能有两个原因前者和后者的方法。