8

Django Docsには、管理インターフェイスで読み取り専用フィールドのカスタム HTML を出力できると記載されています。これはまさに私が必要としているものですが、うまくいかないようです。

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 を作成するはずの 'my​​field' メソッドは呼び出されません。

私が間違っていることを誰かが知っていますか?

敬具、

パトリック

4

2 に答える 2

14

「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'。最後に、またはを使用して、実際のmyfieldフィールドをフォームから除外する必要があります。excludefields

于 2013-02-17T04:35:08.403 に答える