Django:创建多项选择字段的最佳方法

时间:2018-08-01 00:22:35

标签: django django-models

在Django中创建多选选项时,似乎有两种不同的选择方式-选项a或选项b,请参见下文。每种选择相对于其他都有哪些优势。一个人通常比另一个人好吗?我是否缺少更好的方法?

选项a

            <#assign image = "http://10.1.160.59:8082/geoserver/www/project/images/photo/img_"+feature["site"].value+"_"+feature["drillholes"].value+".jpg">
            <#if image?has_content>
                <tr><td>${"image"}</td> <td><img src=${"http://10.1.160.59:8082/geoserver/www/project/images/photo/img_"}${feature["site"].value}${"_"}${feature["drillholes"].value}${".jpg"} height="200" width="250" style="border-width:1;border-style:solid"/> </td></tr>
            </#if>
            <#if !image?has_content>
                <tr><td>${"image"}</td> <td><img src=${"http://10.1.160.59:8082/geoserver/www/project/images/photo/No_Image.jpg"} height="200" width="250" style="border-width:1;border-style:solid"/> </td></tr>
            </#if>

选项b

TYPE_CHOICES=(
    ('teacher', ("Teacher")),
    ('student', ("Student")),
)
user_type  = models.CharField(max_length=20, default='student', choices=TYPE_CHOICES)

2 个答案:

答案 0 :(得分:3)

在过去,内存和存储的每个字节都很宝贵,将这些选择存储为小整数是有意义的,但是现在它没有任何实质性的好处。将其存储为字符串可使代码更具可读性,使数据库更易于管理且更易于迁移。因此,除非您真正关心存储成本的微小差异,否则我建议使用字符串作为选项值。

答案 1 :(得分:3)

我可以建议您选择第三种方法,它虽然不需要太多工作,但可以使代码更易读,并且避免以后进行文本比较。

定义一个枚举

class UserTypeEnum(enum.Enum):
    """Define enums for user type"""
    TEACHER = 0
    STUDENT = 1 

在模型中

class Employee(models.Model)
   user_type = models.IntegerField(choices=UserTypeEnum.choices(), 
   default=UserTypeEnum.TEACHER)

然后您可以进行

之类的检查
if user_type == UserTypeEnum.TEACHER:
   ...