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