django - Django:计算字段 + admin_order_field + action => FieldError:无法解析关键字
问题描述
我正在使用 django admin (1.11.x) 并定义了一个计算字段 (_due_date_in_days) 以将其显示为一列。我希望能够像常规字段一样对该列进行排序。
我有一个模型类“注册”,其中包含一个日期字段“due_date”和一个计算字段“_due_date_in_days”
def _due_date_in_days(self):
return (now().date() - self.due_date).days
在“RegistrationManager”类的管理器上,我添加了一个注解
def get_queryset(self):
qs = super(RegistrationManager, self).get_queryset().filter()
return qs.annotate(_due_date_in_days=now() - F('due_date'))
在 RegistrationAdmin 中,我在订单列表中添加了 format_due_date_in_days
def format_due_date_in_days(self, obj):
return (now().date() - self.due_date).days
format_due_date_in_days.admin_order_field = '_due_date_in_days'
计算字段上的排序运行良好,直到我使用在 ExampleAdmin 类上定义的操作( https://docs.djangoproject.com/fr/1.11/ref/contrib/admin/actions/ ):
def mark_as_printed(self, request, queryset):
rows_updated = queryset.update(is_printed=True)
当我对计算字段进行排序并且我正在使用此操作时,发生错误:
django.core.exceptions.FieldError: Cannot resolve keyword '_due_date_in_days' into field. Choices are: ...
解决方案
其实我的情况有一个简单的解决方案:
删除注释
在“-due_date”上定义 order_field
行为将是预期的
format_due_date_in_days.admin_order_field = '-due_date'
推荐阅读
- c++ - C++ 中的刽子手游戏猜字母
- javascript - React - 受控组件有什么好处?
- typescript - 有没有办法从 TypeORM 关系中排除字段(或包括某些字段)
- javascript - NextJS:getStaticProps 重新验证不起作用
- postman - 如何触发 GetTripNotifications
- swagger - 如何使用带有现有 swagger.json 的 swagger-ui-dist 从基于 hapi 的服务器提供 swagger ui?
- arduino - A7 GSM/GPRS/GPS MOdules 的命令 AT+CIPSTART 出现问题
- string - mongoose 聚合 $convert 带空格的字段名
- c# - 在统一录制播放时减少麦克风的延迟?
- javascript - 移动设备上的 Chart.JS 问题(Wordpress 页面)