您可以在管理界面中为只读字段输出自定义HTML的Django Docs state。这正是我所需要的,但似乎没有用。

在admin.py中:

from django.contrib import admin

class ExampleAdmin(admin.ModelAdmin):
    readonly_fields = ('myfield', )

    def myfield(self, instance):
        print 'This part of the code is never reached!'
        return u'<b>My custom html for the readonly field!</b>'

    myfield.allow_tags = True

admin.site.register(State, StateAdmin)

在models.py中:
class State(models.Model):
    myfield = MyCustomField()
    ... etc ...

class MyCustomField(models.TextField):
    def to_python(self, value):
        ... etc ...

该字段在管理员编辑页面上显示为只读。但是,永远不会调用应该创建自定义html的“myfield”方法。

有人知道我在做什么错吗?

亲切的问候,

帕特里克

最佳答案

查看“django/contrib/admin/util.py”文件的lookup_field方法,这似乎是预期的行为。这是您正在使用的代码:

readonly_fields = ('myfield', )

由于myfield是模型中定义的实际字段,因此将其包含在readonly_fields中只会使其无法编辑;它不允许您自定义显示给用户的内容。为此,您必须给readonly_fields一个非实际字段,例如myfield_readonly。然后,您当然必须将ModelAdminmyfield方法以及myfield_readonly重命名为myfield.allow_tags = True。您可能还需要添加myfield_readonly.short_description = 'My Field'。最后,您需要使用myfieldexclude将实际的fields字段保留在表单之外。

关于django - 永远不会调用Django管理界面中字段的只读方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14915549/

10-12 18:18