Django:计算字段+ admin_order_field +操作=> FieldError:无法解析关键字

时间:2018-09-25 07:13:56

标签: django django-admin

我正在使用django admin(1.11.x),我定义了一个计算字段(_due_date_in_days)以将其显示为一列。我希望能够像常规字段一样对这一列进行排序。

我有一个模型类“ Registration”,其中包含一个日期字段“ 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: ...

1 个答案:

答案 0 :(得分:0)

事实上,我有一个简单的解决方案:

  • 删除注释

  • 在“ -due_date”定义订单字段

行为将是预期的行为

format_due_date_in_days.admin_order_field = '-due_date'