Djangoアプリで、一部のモデルの管理者変更フォームにカスタマイズされたヘルプテキストを追加できるようにしたいと思います。注私がフィールド固有のhelp_text
属性について話しているのではありません個々のフィールドに設定できます。たとえば、My_Model
のMy_App
の変更フォームの上部に、「モデルの詳細については http://を参照してください。 example.com "は、内部ドキュメントWikiへのリンクを提供するために使用します。
これを達成する簡単な方法はありますか、またはモデルのカスタム管理フォームを作成する必要がありますか?もしそうなら、私がそれをどのように行うかの例を教えてもらえますか?
これを達成するには、かなり単純ですが、文書化されていない方法があります。
まず、管理者に追加のコンテキストを渡す必要があります。これを行うには、管理クラス内でrender_change_form関数を定義できます。例:
# admin.py
class CustomAdmin(admin.ModelAdmin):
def render_change_form(self, request, context, *args, **kwargs):
# here we define a custom template
self.change_form_template = 'admin/myapp/change_form_help_text.html'
extra = {
'help_text': "This is a help message. Good luck filling out the form."
}
context.update(extra)
return super(CustomAdmin, self).render_change_form(request,
context, *args, **kwargs)
次に、そのカスタムテンプレート(change_form_help_text.html)を作成し、デフォルトの「admin/change_form.html」を拡張する必要があります。
# change_form_help_text.html
{% extends 'admin/change_form.html' %}
{% block form_top %}
{% if help_text %}<p>{{ help_text }}</p>{% endif %}
{% endblock %}
このテンプレートをtemplates/admin/myapp /内に配置することを選択しましたが、これも柔軟です。
詳細については、以下をご覧ください。
http://davidmburke.com/2010/05/24/Django-hack-adding-extra-data-to-admin-interface/
管理者の fieldsets を使用:
_class MyAdmin(admin.ModelAdmin):
fieldsets = (
(None, {
'fields': ('first', 'second', 'etc'),
'description': "This is a set of fields group into a fieldset."
}),
)
# Other admin settings go here...
_
管理者は複数のフィールドセットを持つことができます。それぞれに独自のタイトルを付けることができます(上のNone
をタイトルに置き換えます)。 'classes': ('collapse',),
をフィールドセットに追加して、折りたたんで開始することもできます(wide
クラスはデータフィールドを広くし、他のクラス名は、CSSが言うことを意味します)。
注意してください:description
文字列はsafeと見なされるので、そこにクリーニングされていないデータを入れないでください。これは、必要に応じて(リンクのように)マークアップを配置できるように行われますが、ブロックのフォーマット(_<ul>
_リストのような)はおそらく正しく表示されません。
私があなたが望むことを理解しているなら、以下のコードはあなたが望むことをするべきです。
def __init__(self, *args, **kwargs):
super(ClassName, self).__init__(*args, **kwargs)
if siteA:
help_text = "foo"
else:
help_text = "bar"
self.form.fields["field_name"].help_text = help_text
これは、いくつかのロジックを使用してオーバーライドされたフォームを変更する例です。そのため、オーバーライドしたModelAdminコンストラクタにこれを置くだけです。
説明付きのフィールドセット を作成する可能性のほかに 変更フォームの管理者のテンプレートを上書きする を使用できます。