0

私の質問が少し広範で、必要なものを検索しても問題がある場合は申し訳ありません。

本質的に、私はdjango管理者にヒーロー画像を持っていますが、画像にポイントを配置できるカスタムフォームを作成する必要があります(マップのようですが、マップではありません)。

管理フレームワークの範囲内でこれを行う方法について、私は完全に途方に暮れています。私の質問は(ちょっと)これに似ていると思います: jquery how to add pin to image and save the position to SQL

ただし、特にdjango管理者統合に関して。

編集:

ほとんどの場合、http://pictip.greenmandarine.net/ またはhttp://duncanheron.github.io/dropPin/のいずれかを使用します。

だから、本当に私の質問は、Django管理者にマスターイメージを表示させ、ユーザーがポイントをクリックしてそれらのポイントをデータベースに保存できるようにする方法です。注:私は初めてのdjangoユーザーではないので、ORMを取得します。これは、これを行うためのカスタムフォームでdjango管理者をいじる方法の詳細です...

4

1 に答える 1

2

カスタム JS + フォームを追加する

meta Mediaフォーム クラスクラス ORを使用して、任意のスクリプトを管理者に挿入できます。ModelAdmin.Media

https://docs.djangoproject.com/en/dev/ref/contrib/admin/

カスタム フォームを作成して、任意の情報を受け入れることができます ( this_field_doesn't_actually_exist = forms.CharField)。

フォーム フィールドを受け入れる任意のパラメータにメソッド名をModelAdmin追加し、そのメソッド名をreadonly_fields

例えば

readonly_fields = ('foo', )
fields = ('foo',)
def foo(self, obj):
    return "Arbtrary HTML"
foo.allow_tags = True

今、あなたは持っています

  • HTML 画像
  • 任意の JavaScript
  • Python に渡す任意のフォーム フィールド

カスタム ウィジェットを追加する

コメンターが示唆したように、それ自体をレンダリングする方法を知っているウィジェットまたはカスタムモデルフィールドを構築できます(追加のメディアの追加、入力の表示、戻り値の解析、モデルフィールドの場合のストレージ用の値の変換を含む)が、複数の入力が必要な場合、比較的複雑であることがわかりました。

多くの場所で再利用するものを構築したい場合は、この方法を研究してください。

モデルごとに管理テンプレートをオーバーライドすることもできます

モデルごとにいくつかのテンプレートをオーバーライドすることもできます。カスタマイズの程度によっては、これがよりクリーンな方法になる可能性があります。

個人的には、フォームを本当にカスタマイズする必要があるまで、JS + readonly_field を実行します。

https://docs.djangoproject.com/en/dev/ref/contrib/admin/#overriding-admin-templates

modeladmin ごとにカスタム パスを指定することもできます。

ModelAdmin.add_form_template add_view() によって使用されるカスタム テンプレートへのパス。

ModelAdmin.change_form_template カスタム テンプレートへのパス。change_view() で使用されます。

ModelAdmin.change_list_template カスタム テンプレートへのパス。changelist_view() で使用されます。

ModelAdmin.delete_confirmation_template カスタム テンプレートへのパス。1 つ以上のオブジェクトを削除するときに確認ページを表示するために delete_view() によって使用されます。

ModelAdmin.delete_selected_confirmation_template カスタム テンプレートへのパス。1 つ以上のオブジェクトを削除するときに確認ページを表示するために、delete_selected アクション メソッドによって使用されます。アクションのドキュメントを参照してください。

ModelAdmin.object_history_template history_view() で使用されるカスタム テンプレートへのパス。

管理ビューを完全に上書きすることもできます

admin ビューは単なる django ビューです。次のメソッドをオーバーライドすることで、レンダリングからコンテキストまで完全にオーバーライドできます。

ModelAdmin.add_view(self, request, form_url='', extra_context=None) モデル インスタンス追加ページの Django ビュー。以下の注を参照してください。

ModelAdmin.change_view(self, request, object_id, form_url='', extra_context=None) モデル インスタンス エディション ページの Django ビュー。以下の注を参照してください。

ModelAdmin.changelist_view(self, request, extra_context=None) モデル インスタンスの変更リスト/アクション ページの Django ビュー。以下の注を参照してください。

ModelAdmin.delete_view(self, request, object_id, extra_context=None) モデル インスタンスの削除確認ページの Django ビュー。以下の注を参照してください。

ModelAdmin.history_view(self, request, object_id, extra_context=None)

于 2013-10-04T17:12:03.100 に答える