django2集成xadmin list index out of range报错追踪和处理

在尝试集成xadmin到Django2.x项目时,出现数组越界的错误。经过排查,发现是时间字段类型导致的问题,特别是datetime字段在xadmin中产生了错误。通过将时间字段类型改为DateField解决了数组越界问题,但同时也改变了业务逻辑。错误源于xadmin代码中的MultWidget处理方式,由于Django的更新,引入了spaceless标签导致原有代码失效。为避免修改Django核心代码,选择修改xadmin的源码,通过调整MultWidget的分割方式解决问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天又搞起了django,个人爱好用最新版的,所以虽然比着老师的视频做,还是出了莫名其妙的问题

IndexError at /xadmin/goods/goods/add/
list index out of range

遇到了数组越界
贴下报错信息,当然这个看不出什么,数组越界,这菜鸟都能看懂的英文

Error during template rendering
In template /Users/seth/pyenv/imooc_env36/lib/python3.6/site-packages/crispy_forms/templates/bootstrap3/field.html, error at line 28

{% if field|is_checkbox and form_show_labels %}

这里写图片描述

顺便上张图
一般人看到这里就懵了,反正只知道数组越界,天知道什么原因,然后把这个图贴给别人。
淡定,django的报错很详细的,往下看
这里写图片描述
很明显是时间这边出了问题
时间add_time的字段类型出了问题
先说下django的时间字段类型
有3个,这里直接贴网上的

需要了解跟时间相关的三个modelField,
DateTimeField和DateField和TimeField
存储的内容分别对应着datetime(),date(),time()三个对象。
    对于auto_now和auto_now_add。两者默认值都为False。
    auto_now=Ture,字段保存时会自动保存当前时间,但要注意每次对其实例执行save()的时候都会将当前时间保存,也就是不能再手动给它存非当前时间的值。
    auto_now_add=True,字段在实例第一次保存的时候会保存当前时间,不管你在这里是否对其赋值。但是之后的save()是可以手动赋值的。也就是新实例化一个model,想手动存其他时间,就需要对该实例save()之后赋值然后再save()。

随便拷贝了一句,大概只是介绍了auto_now和auto_now_add,和我们报错无关,这里只是拓展一下三个时间类型,
然后我们来看这datetime(),date(),time()3个对象

date
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值