我的模块中有一个字段用于保存对象的状态. 到目前为止,我已经使用了:

ORDER_STATUS = ((0, 'Started'), (1, 'Done'), (2, 'Error'))
status = models.SmallIntegerField(choices=ORDER_STATUS)

它很容易转换为一种方式:

def status_str(self): return ORDER_STATUS[self.status][1]

问题出在更新的时候.我发现自己的代码是这样的:

order.status = 2 # Error Status

这非常糟糕,而且很难同步.我猜解决方案类似于C的枚举{}.或者有一种完全不同的方法来解决这个问题?

谢谢

推荐答案

也许这个问题对你有帮助:Set Django IntegerField by choices=… name

PENDING = 0
DONE = 1
STATUS_CHOICES = (
    (PENDING, 'Pending'),
    (DONE, 'Done'),
)

然后你可以做order.status = Order.DONE.


Note,您don't必须实现自己的方法来检索(可读)值Django provides the method get_status_display itself.

Django相关问答推荐

Django-Values()并按月分组

如何在Django查询集中查询多对多字段内是否存在实例

Django:添加第二个';详细';用于检索额外信息的视图

为特定表行更新或创建

如何删除django请求中的重复项

包含资源时,DRF 返回我的软删除记录

"" 需要有字段 "id" 的值才能使用这种多对多关系

验证 Django 模型对象的正确方法?

测试 Django ModelForm 是否有实例

如何在 Django 中向 ChoiceField 添加class?

使用 scrapy 访问 Django 模型:定义 Django 元素的路径

Django查询在哪里

django中的脏字段

从 virtualenv 中,pip freeze > requirements.txt 给出了一堆垃圾!如何修剪它?

Django 覆盖模型 Clean() 与 Save()

Django - 一起为 2 个或更多字段创建唯一的数据库约束

在 PyPy 下运行 Django 的缺点?

python/django中setattr和对象操作的区别

访问 django 管理模板中的对象

暂时禁用 Django 缓存