2013-02-16 13 views
5

とは決して呼び出されません。Django Docs state管理インターフェイスの読み取り専用フィールドにカスタムHTMLを出力することができます。これは私が必要とするものですが、うまくいかないようです。 admin.pyでDjango管理インターフェースのフィールドのReadonlyメソッドは、

:models.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) 

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

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

フィールドは読み取り専用管理者の編集ページ上で表示されます。しかし、カスタムHTMLを作成するはずの 'my​​field'メソッドは呼び出されません。

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

敬具、

パトリック

答えて

11

"ジャンゴに/ contrib /管理/ util.py" ファイルのlookup_field方法は、これは予期される動作であるように思われます。ここで使用しているコードは次のとおりです。

readonly_fields = ('myfield',) 

myfieldは、モデルで定義された実際のフィールドであるので、readonly_fieldsでそれを持つことだけでは編集できないようになります。ユーザーに表示される内容をカスタマイズすることはできません。これを行うには、myfield_readonlyのように実際のフィールドではないものをreadonly_fieldsに渡す必要があります。 ModelAdminmyfieldメソッドの名前をmyfield_readonly、もちろんmyfield.allow_tags = Trueに変更する必要があります。おそらくmyfield_readonly.short_description = 'My Field'を追加することもできます。最後に、excludeまたはfieldsのいずれかを使用して、実際のmyfieldフィールドをフォームの外に残したい場合があります。

関連する問題