我有这样的模特:
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 。
如何将正常名称状态提供给列,或者我做错了什么?
我可以按此字段排序吗?
答案 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
方法时添加自动创建的方法时,追逐是一种了解何时可以设置这些属性的方法。但我可能只是跳过它并在管理类上粘贴一个包装器,我知道我可以设置属性。