django xadmin :如何根据model里自定义的方法在list_display里面排序?

我在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后台列表显示的内容

我想通过点击“报警时间”来排序

评论 0