我在model里面自定义了一个报警时间的方法,是通过(当前日期-校正日期+有效期)这样计算出来的,同时也显示在list_display中,现在的问题是在list列表中无法通过点击列名来排序,其他的数据库里有的字段都是可以通过点击列名来选择排序方式,就是这个自定义的方法不行,有哪位高手知道如何解决?我查了一下有个admin_order_field方法可以让自定义的方法排序,但是这个方法只能设置model里面有的字段,无法选择自定义的方法。
# adminx.py(其中alarmData是model里面自定义的方法)
class ToolsAdmin(object):
ordering = ('id',)
list_per_page = 20
# 调整文本输入框的大小
formfield_overrides = {
models.IntegerField: {'widget': TextInput(attrs={'size': '20'})}
}
# 设置工具清单表格显示内容
list_display = (
'num', 'name', 'model', 'type', 'measuring_range', 'classes', 'calibration_data', 'certificate_num',
'expiry_data',
'nextDate', 'status', 'status_record', 'use_department',
'location', 'buy_data', 'comment', 'alarmData', 'file', 'photo')
# 设置过滤器
list_filter = ('classes', 'status', 'use_department', 'type')
# 设置查询字段
search_fields = ('num', 'name')
list_editable = ('calibration_data', 'certificate_num', 'expiry_data', 'file')
# model.py
class Tools(models.Model):
...
calibration_data = models.DateField(verbose_name='校正日期', null=True, blank=True)
expiry_data = models.IntegerField(choices=EXPIRY_DATA_ITEMS, default=0, verbose_name='有效期(月)', null=True,
blank=True)
def alarmData(self):
color_code = 'black'
# 如果计量日期不为空,而且状态是在用,计算还需要多少天计量
if self.calibration_data is not None and self.status == 0:
# 根据计量有效期来计算还需要多少天计量
if self.expiry_data == 0:
date = self.calibration_data + relativedelta(months=12) - datetime.date.today()
elif self.expiry_data == 1:
date = self.calibration_data + relativedelta(month=6) - datetime.date.today()
else:
date = ''
# 判断报警时间是否是小于0的,如果小于零则为红色
if date.days < 0:
color_code = 'red'
return format_html(
'<span style = "color: {};">{}</span>',
color_code,
date.days
)
else:
return ''
下面是xadmin后台列表显示的内容
相似问题