我有这样的模型:
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', )
但我在状态列中看到字段名称柯里化(Currying)。
我如何为列提供正常名称状态,否则我会犯错误?
我可以按此字段排序吗?
最佳答案
设置可调用的 get_status_display
的 short_description
属性来控制列名称。您无法按计算值排序(Django 使用数据库进行排序),但如果您的基础 status
字段提供了正确的排序顺序,请将 admin_order_field
属性设置为 “状态”
。
list_display
的文档给出了设置这两个属性的示例:
https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.list_display
由于它是自动创建的方法,因此稍微复杂一些 - 可调用在类定义时不可用。我认为您可以在注册管理员之前设置它们,但我还没有测试过:
M.get_status_display.short_description = 'status'
M.get_status_display.admin_order_field = 'status'
admin.site.register(M, MAdmin)
如果这不起作用,追踪选择字段的 contribute_to_class
方法何时被调用以添加自动创建的方法是确定何时可以设置这些属性的一种方法。但我可能会跳过它并在管理类上粘贴一个包装器,我知道我可以在其中设置属性。
关于Django 管理 get_FOO_display,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21242486/