2

Django の admin で、GET 変数を使用して「オブジェクトの追加」フォームのフィールドを設定する方法を見てきました (たとえば/admin/app/model/add?title=lol、「タイトル」フィールドを「lol」に設定します)。

/admin/app/model/add?key=18ただし、別のモデルのインスタンスからフィールドのデフォルト データを読み込んでロードできるようにしたいと考えています。理想的には、フォームに入力する値に対して何らかの処理を実行できるようにしたいと考えています。どうすればいいですか?

4

2 に答える 2

5

私はそれを理解することができました。ありがたいことに、Django では arequestGETdict を置き換えることができます (管理フォームに事前入力するために使用されます)。以下は私のために働いた:

class ArticleAdmin(admin.ModelAdmin):
    # ...

    def add_view(self, request, form_url='', extra_context=None):
        source_id = request.GET.get('source', None)
        if source_id is not None:
            source = FeedPost.objects.get(id=source_id)
            # any extra processing can go here...
            g = request.GET.copy()
            g.update({
                'title': source.title,
                'contents': source.description + u"... \n\n[" + source.url + "]",
            })
            request.GET = g

        return super(ArticleAdmin, self).add_view(request, form_url, extra_context)

このようにして、 URL パラメーターsourceからオブジェクトを取得し、必要な操作を行い、フォームに事前入力します。

于 2012-04-23T16:44:58.667 に答える
2

インスタンスのメソッドadd_viewをオーバーライドできます。ModelAdminそこにオブジェクトの取得を追加し、オブジェクトをに設定pkNone、そのオブジェクトを としてinstanceフォームに提供します。のオブジェクトはpk == None、フォームのデータベースに常に新しいオブジェクトとして挿入されますsave()

于 2012-04-19T05:05:03.733 に答える