Django 管理 get_FOO_display

标签 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', )

但我在状态列中看到字段名称​​柯里化(Currying)

我如何为列提供正常名称​​状态,否则我会犯错误?

我可以按此字段排序吗?

最佳答案

设置可调用的 get_status_displayshort_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/

相关文章:

python - 是否可以验证youtube/vimeo视频嵌入

python - Django:管理界面中多对多项目的名称

django - 与 Django 的唯一外键对

python - 在共享主机上访问 Django Runserver

django - 防止 django 管理员在列表表单上运行 SELECT COUNT(*)

Django Postgresql Heroku : Operational Error - 'FATAL too many connections for role "usename"'

python - 模块未找到错误 : No module named 'forms'

django - 在 Django Admin 编辑项目 View 中显示自定义链接?

python - DJANGO_SETTINGS_MODULE 未定义

python - 从 django-admin 中选择另一个外键来过滤外键字段?