2014-10-03 56 views
-1

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

这是我在问自己什么是最好的方式:)

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


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

它是一个不错的选择以前那样?我一定要更换integerField()由CharField()有了这样的选择:`

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

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

谢谢。

回答

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这样的选项的后缀。这些陈述应该位于模型之外,以便于在项目的其他部分导入。

+0

谢谢我爱Interger存储之间的混合是全局的,以允许更好的代码解释:) – billyJoe 2014-10-03 18:39:02

-1

对于这些类型的定义,我创建了一个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) 

你到底是指那些价值在所有代码中都有名字,所以它很好地说。但是在数据库中,您无法直接看到每个值的含义。