web-dev-qa-db-ja.com

Django管理インターフェースで、アイテムを複製する方法はありますか?

管理インターフェイスで既存のリストを複製する機能を追加する簡単な方法があるかどうか疑問に思っていますか?

データ入力では、多くのアイテムが別のアイテムと一般的なデータを共有する状況に遭遇しました。時間を節約するために、既存のリストをすばやく複製し、変更されたデータのみを変更するのは非常に便利です。より良いモデル構造を使用することは、データの重複を減らす1つの方法ですが、将来、重複したデータを個別に変更する必要がある場合があります。

61
sesh

ここには、より優れた(ただし組み込みではない)ソリューションがあります。

https://github.com/RealGeeks/Django-modelclone

彼らのREADMEから:

DjangoAdminにはsave_as変更ページに新しいボタンを追加して、そのオブジェクトの新しいインスタンスを保存する機能。

リンクをクリックするとすぐに元のオブジェクトの同一のコピーを保存し(検証エラーが発生しない場合)、小さな変更を忘れた場合は、この機能の動作が気に入らない。新しいオブジェクトで必要な場合は、既存のオブジェクトの複製になります。

一方、Django-modelcloneは中間ビューを提供し、基本的にフォームに事前に入力します。したがって、新しいインスタンスを変更して保存できます。または、副作用なしで立ち去ります。

5
kontextify

この方法を適用することもできます: https://stackoverflow.com/a/4054256/799592

私の場合、「名前」フィールドに一意の制約がある場合、このアクションは機能し、任意の形式から要求できます。


def duplicate_jorn(modeladmin, request, queryset):
    post_url = request.META['HTTP_REFERER']

    for object in queryset:
        object.id = None
        object.name = object.name+'-b'
        object.save()

    return HttpResponseRedirect(post_url)

0
Abel