Django管理员get_FOO_display

时间:2014-01-20 19:27:33

标签: django django-models django-admin

我有这样的模特:

class M(models.Model):
    CHOICES = (('A', 'Accepted'), ('R', 'Rejected'))

    status = model.CharField(max_length=1, choices=CHOICES)

我通过这种方式在管理员中注册此模型:

class MAdmin(admin.ModelAdmin):
     list_display = ('get_status_display', )

但我在状态栏中看到字段名称​​ curried

如何将正常名称​​状态提供给列,或者我做错了什么?

我可以按此字段排序吗?

2 个答案:

答案 0 :(得分:1)

将这些属性添加到您的功能

def get_status_display(self, obj):
        --
        YOUR CODE HERE
        --
get_status_display.short_description = 'status'
get_status_display.admin_order_field = 'status'

答案 1 :(得分:0)

设置short_description callable的get_status_display属性以控制列名。您无法按计算值排序(Django使用数据库进行排序),但如果基础status字段提供正确的排序顺序,请将admin_order_field属性设置为'status'

list_display的文档提供了设置这两个属性的示例: https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.list_display

因为它是一个自动创建的方法,所以它稍微复杂一些 - 在类定义时不能使用callable。我你可以在注册管理员之前设置它们,但我没有测试过:

M.get_status_display.short_description = 'status'
M.get_status_display.admin_order_field = 'status'
admin.site.register(M, MAdmin)

如果这不起作用,那么在调用选择字段的contribute_to_class方法时添加自动创建的方法时,追逐是一种了解何时可以设置这些属性的方法。但我可能只是跳过它并在管理类上粘贴一个包装器,我知道我可以设置属性。