Django - 按自定义列

时间:2017-01-26 11:59:44

标签: django django-admin

我无法弄清楚如何让管理员使用自定义列排序记录 - hours_to_deadline(当他们点击列标题时)。在我的情况下,它是timedelta。

class JobAdmin(SuperModelAdmin):
    ...
    list_display = ['id', 'identificator', 'created', 'invoice__estimated_delivery','hours_to_deadline','customer__username', 'language_from__name', 'language_to__name',
                    'delivery__status', 'confirmed', 'approved', 'invoice__final_price']
    ...


    def hours_to_deadline(self,obj):
        try:
            return (obj.invoice.estimated_delivery - now())
        except:
            return None

enter image description here

我找到了这个解决方案:https://stackoverflow.com/a/15935591/3371056

但就我而言,我不能只做sum或类似的事情。

你知道该怎么办吗?

2 个答案:

答案 0 :(得分:1)

您不能通过非实际数据库字段的字段进行排序,因为所有排序都是在数据库级别完成的。如果它有一个与数据库字段有关的值,你可以在模型定义中做类似的事情:

hours_to_deadline.admin_order_field = 'database_field'

你可以在这里阅读更多相关信息 https://docs.djangoproject.com/en/1.10/ref/contrib/admin/

答案 1 :(得分:-2)

答案是:ordering =(' -id',)

class JobAdmin(SuperModelAdmin):

    list_display = ['id', 'identificator', 'created', 'invoice__estimated_delivery','hours_to_deadline','customer__username', 'language_from__name', 'language_to__name',
                    'delivery__status', 'confirmed', 'approved', 'invoice__final_price']
    ordering = ('-id',)


    def hours_to_deadline(self,obj):
        try:
            return (obj.invoice.estimated_delivery - now())
        except:
            return None