【问题标题】:Django : Calculated field + admin_order_field + action => FieldError: Cannot resolve keywordDjango:计算字段 + admin_order_field + action => FieldError:无法解析关键字
【发布时间】:2018-09-25 07:13:56
【问题描述】:

我正在使用 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: ...

【问题讨论】:

    标签: django django-admin


    【解决方案1】:

    其实我的情况有一个简单的解决方案:

    • 删除注释

    • 在“-due_date”上定义 order_field

    行为将是预期的行为

    format_due_date_in_days.admin_order_field = '-due_date'
    

    【讨论】:

      猜你喜欢
      • 2013-08-29
      • 2015-10-30
      • 1970-01-01
      • 2021-05-23
      • 2013-10-09
      • 2019-05-26
      • 1970-01-01
      • 2011-12-26
      • 1970-01-01
      相关资源
      最近更新 更多