我有一个依赖元组的Django模型.我想知道在Django程序中引用该元组中的常量的最佳实践是什么.例如,在这里,我想将"default=0"指定为更具可读性且不需要注释的内容.有什么建议吗?

Status = (
    (-1, 'Cancelled'),
    (0, 'Requires attention'),
    (1, 'Work in progress'),
    (2, 'Complete'),
)

class Task(models.Model):
    status = models.IntegerField(choices=Status, default=0) # Status is 'Requires attention' (0) by default.

编辑:

如果可能的话,我想完全避免使用数字.不知何故,使用字符串"需要注意"会更具可读性.

推荐答案

为整数值定义常量非常常见,如下所示:

class Task(models.Model):
    CANCELLED = -1
    REQUIRES_ATTENTION = 0
    WORK_IN_PROGRESS = 1
    COMPLETE = 2

    Status = (
        (CANCELLED, 'Cancelled'),
        (REQUIRES_ATTENTION, 'Requires attention'),
        (WORK_IN_PROGRESS, 'Work in progress'),
        (COMPLETE, 'Complete'),
    )

    status = models.IntegerField(choices=Status, default=REQUIRES_ATTENTION)

通过将常量和Status移动到模型类中,您可以保持模块的名称空间更整洁,另外,您可以在导入Task模型的任何地方引用Task.COMPLETE.

Django相关问答推荐

使用django直接计算geohash而不创建模型

我找不到为什么我的DRF登录测试没有按预期工作

如何从列中捕获数据并将其添加到下拉菜单中,以便表单填充另一个表

通过从不同模型中提取值来在基于 django 类的视图中传递变量

通过get_form_kwargs将请求传递给Django表单未能使表单访问self.request.user.

如何在 createsuperuser 中实例化表

Django 仅预取相关模型的最新对象

如何根据反向外键相关模型的字段过滤 QuerySet?

Django:使用 Django ORM 实现 JOIN?

如何查看 Django 调试工具栏?

Python / Django 中的 Unicode 与 UTF-8 混淆?

django- nginx: [emerg] open() "/etc/nginx/proxy_params" 在 /etc/nginx/sites-enabled/myproject:11 中失败(2:没有这样的文件或目录)

Django 1.9 中 django.db.models.loading.get_model() 的类似功能是什么?

Django:使用render或render_to_response时添加响应头

在 Django 中使用 Cython,是否有意义?

如何在字段集中显示 Django 管理内联模型?

引发 404 并继续 URL 链

Django 将多个模型传递给一个模板

XlsxWriter 对象另存为 http 响应以在 Django 中创建下载

Django 1.7 迁移不会重新创建删除的表,为什么?