【问题标题】:Best way to store hair colors, eyes colors with django [closed]用 django 存储头发颜色、眼睛颜色的最佳方法 [关闭]
【发布时间】:2014-11-28 19:06:54
【问题描述】:

我有一个小问题,我想知道用 django 存储眼睛或头发颜色的最佳方法。

这是我在问自己最好的方法之前所做的:)

HAIR_COLORS = (
    ('1', 'braun'),
    ('2', 'blond'),
    ('3', 'red'))


hair_color = models.IntegerField(max_length=1, choices=HAIR_COLORS)

这是一个好的选择吗?我是否必须用 CharField() 替换 integerField() ,例如:`

HAIR_COLORS = (
    ('braun', 'braun'),
    ('blond', 'blond'),
    ('red', 'red'))

其实我并不满足,你最喜欢的实现方式是什么?

谢谢。

【问题讨论】:

    标签: django models


    【解决方案1】:

    最好的办法是:

    BROWN = 10
    BLOND = 20
    RED = 30
    
    HAIR_COLORS = (
    (BROWN, 'braun'),
    (BLOND, 'blond'),
    (RED, 'red'))
    
    hair_color = models.IntegerField(max_length=2, choices=HAIR_COLORS)
    

    原因是:

    1. 当您使用此类数字时,您始终可以在选择的任何位置插入其他颜色。
    2. 不要直接使用数字,因为在代码中检查或更新时会更好且更明确

    如果 obj.hair_color == BROWN 而不是 obj.hair_color == 10

    obj.hair_color = BROWN 与 obj.hair_color = 10 相比

    还建议使用更好的命名约定,例如:EYES_BROWN 等常量的前缀和 HAIR_COLORS_CHOICES 等选项的后缀。并且这些语句应该位于模型之外,以便在项目的其他部分中导入。

    【讨论】:

    • 谢谢你,我喜欢 Interger 存储是全局变量之间的混合,以便更好地解释代码:)
    【解决方案2】:

    对于这些类型的定义,我创建了一个 global_defs.py 文件

    global_defs.py:

    HAIR_COLOR_BROWN = 1
    HAIR_COLOR_BLACK = 2
    ...
    

    在模型中:

    import global_defs as defs
    ...
    class person(models.Model):
        ...
        color = models.IntegerField(default=defs.HAIR_COLOR_BROWN)
    

    最后,您在所有代码中都按名称引用这些值,所以说得很好。但是在数据库中,您无法直接看到每个值的含义。

    【讨论】:

      猜你喜欢
      • 2011-07-20
      • 2021-11-10
      • 2010-11-12
      • 1970-01-01
      • 2018-01-12
      • 1970-01-01
      • 2010-11-12
      • 2011-05-29
      相关资源
      最近更新 更多