django模型字段choices使用enum枚举,admin filter失效的问题的解决

原创
2020/06/12 15:22
阅读数 2K
环境:
django 2.1.5
python 3.6.3
 
问题描述
有一个模型类 ScheduleTaskResult,中间有一个int类型的status字段,描述状态,使用choices用来限定选项。
使用IntEnum的方式来枚举所有选项,具体代码如下:
 
class ScheduleTaskStatusEnum(IntEnum):
  # 未执行
  not_start = 1
  # 准备执行
  ready = 2
  # 正在执行
  executeing = 3
  # 执行成功
  executed_success = 4
  # 执行失败
  executed_failed = 5
  # 执行失败
  executed_overtime = 6


SCHEDULE_TASK_STATUS_LIST = ((ScheduleTaskStatusEnum.not_start, "未执行"),
(ScheduleTaskStatusEnum.ready, "准备执行"),
(ScheduleTaskStatusEnum.executeing, "正在执行"),
(ScheduleTaskStatusEnum.executed_success, "执行成功"),
(ScheduleTaskStatusEnum.executed_failed, "执行失败"),
(ScheduleTaskStatusEnum.executed_overtime, "执行超时"))

status = models.IntegerField(verbose_name='状态', choices=SCHEDULE_TASK_STATUS_LIST)

 

代码运行逻辑没有问题,但是使用ModelAdmin,我试图使用status作为filter项,来在页面上筛选记录
@admin.register(ScheduleTaskResult)
class ScheduleTaskResultAdmin(ModelAdmin):
  list_filter = ('status',...)

运行进入admin页面正常,但是点击状态的下拉列表,选择其中一项

发现整个页面刷新,还是显示了全部记录,并没有显示相应状态下的记录。
查看url,后面追加了?e=1的参数。显然不对,理论上应该是?status__exact=1
此时查看其它的筛选项,全都正常。
 
解决方案:
把枚举类,变成普通的类,就可以了:
class ScheduleTaskStatusEnum(IntEnum):
-->
class ScheduleTaskStatusEnum:
 
django 的admin应该对枚举intEnum处理有问题,换成Enum也一样。这个坑得注意下。

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部