1

モデルインスタンスを追加し、保存時に閉じるために、django admin 内で新しいウィンドウを開くコードを書いています。これは、ForeignKey フィールドの追加 (緑色のプラス記号) の動作と非常に似ていますが、新しく作成されたモデル インスタンスを選択しません (外部キー フィールドではないため)。

ポップアップ リンクを作成するために追加するコードは次のとおりです。

link = '<a id="add_id_event" class="add-another" onclick="return showAddAnotherPopup(this);" href="%s?date=%s">add</a>' % ( addurl,currentdate)

私のモデルはEventと呼ばれています。RelatedObjectLookups.js を正しく追加します

このモデルを保存しようとすると、django は ForeignKey フィールドで使用するのと同じコードを適用し、持っていない SelectBox をアクティブにしようとします。これにより、window.close() に到達する前に JavaScript が失敗します。

save_model 関数をオーバーライドしてみました

def save_model(self, request, obj, form, change):
    if request.GET.get('_popup') == '1':
        obj.save()
        return HttpResponse('<script type="text/javascript">window.close()</script>')

このコードは使用されますが、HttpResponse 呼び出しは無視され、django はデフォルトをレンダリングします。例えば

<script type="text/javascript">opener.dismissAddAnotherPopup(window, "14382", "TMC 2012\u002D02\u002D02 10:00:00 DDT2010B\u002D028");</script>

宛先 SelectBox オブジェクトがないため失敗します。

ご協力いただきありがとうございます。

4

2 に答える 2

3

ModelAdmin.response_addをオーバーライドする必要があります。そこでリダイレクトが行われます。

私の場合、dismissAddAnotherPopup メソッドをオーバーライドする必要があったため、dismissAddAnotherPopupWithUpdate という名前の新しいメソッドを作成して、派手な M2M ウィジェットを処理しました。私が使用したコードは次のとおりです。

def response_add(self, request, obj, post_url_continue='../%s/'):
    """
    Overriding to force the widget to update
    """
    resp = super(ModelAdmin, self).response_add(request, obj, post_url_continue)
    if request.POST.has_key("_popup"):
        return HttpResponse('<script type="text/javascript">opener.dismissAddAnotherPopupWithUpdate(window, "%s", "%s");</script>' % \
            # escape() calls force_unicode.
            (escape(obj._get_pk_val()), escape(obj)))
    return resp
于 2012-06-08T17:13:34.077 に答える
0

<a>Cari の解決策は確かに機能しますが、これに対する簡単な解決策は、タグで有効な ID を指定することです。ID が使用されるためdismissAddAnotherPopup()、ウィンドウを閉じた後に適切なフィールドを選択できます。window.close()存在する限り、どの ID を指定しても問題ありません。

于 2012-11-16T23:38:52.310 に答える