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

编程

环境:

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也一样。这个坑得注意下。

以上是 django模型字段choices使用enum枚举,adminfilter失效的问题的解决 的全部内容, 来源链接: utcz.com/z/517362.html

回到顶部