2016-10-04 13 views
1

スタティックテキストを変更フォームの管理ページに挿入できますが、編集中のオブジェクトのコンテキストを使用したいと思っています。django adminをカスタマイズするChangeFormテンプレート/カスタムコンテンツを追加する

たとえば、MyObjectの変更フォームでForeignKey接続オブジェクト(obj)のIDをリンクとしてURLに書式設定したいとします。

私の管理オブジェクト:

class MyObjectChangeForm(forms.ModelForm): 
    class Meta: 
     model = MyObject 
     fields = ('field1', 'obj',) 

class MyObjectAdmin(admin.ModelAdmin): 
    form = MyObjectChangeForm 
    list_display = ('field1', 'obj') 
    def render_change_form(self, request, context, *args, **kwargs): 
     self.change_form_template = 'admin/my_change_form.html' 
     extra = {'lame_static_text': "something static",} 
     context.update(extra) 
     return super(MyObjectAdmin, self).render_change_form(request, 
      context, *args, **kwargs) 

マイテンプレートtemplates/admin/my_change_form.html

{% extends "admin/change_form.html" %} 

{% block form_top %} 
    {{ lame_static_text }} 
    <a href="http://example.com/abc/{{ adminform.data.obj.id }}?"/>View Website</a> 
{% endblock %} 

{{adminform.data.obj.id}}コールは明らかに動作しませんが、私はそれらの線に沿って何かをしたいと思います。

現在のオブジェクトの動的コンテキストを管理変更フォームに挿入するにはどうすればよいですか?

答えて

2

これは便利かもしれないが、言うことができないchange_view

class MyObjectAdmin(admin.ModelAdmin): 

# A template for a very customized change view: 
change_form_template = 'admin/my_change_form.html' 

def get_dynamic_info(self): 
    # ... 
    pass 

def change_view(self, request, object_id, form_url='', extra_context=None): 
    extra_context = extra_context or {} 
    extra_context['osm_data'] = self.get_dynamic_info() 
    return super(MyObjectAdmin, self).change_view(
     request, object_id, form_url, extra_context=extra_context, 
    ) 
+0

であなたの余分なコンテキストを追加します。 'get_dynamic_info()'はデータベースクエリを任意に実行するだけですか?それは私が望むものではありません。私は、オブジェクトがすでにデータベースにあることを意味する変更フォームなので、(明らかに)何らかの形で利用可能でなければならない問題のオブジェクトのデータのみを必要とします。また、テンプレート内で '{{osm_data}}'としてアクセスされるでしょうか?あなたが実際の解決策としてここに示唆しているものを明確にしていない。 – lollercoaster

+0

変更ビューをレンダリングする 'object_id'へのアクセス権があります。だからあなたはそのオブジェクトを問い合わせて関連するフィールドIDを取得し、それを 'extra_context'として送ることができます。そして、あなたは '{{osm_data}}'としてテンプレート内でこれらの余分なコンテキストを使うことができます。 – Sagar

+0

これは動作確認できます、ありがとう! – lollercoaster

関連する問題