Django管理インターフェイスで、アイテムを複製する方法はありますか?
-
05-07-2019 - |
質問
管理インターフェースで既存のリストを複製する機能を追加する簡単な方法があるかどうか疑問に思っていますか?
データ入力では、多くのアイテムが別のアイテムと一般的なデータを共有する状況に陥りました。時間を節約するために、既存のリストをすばやく複製し、変更されたデータのみを変更することは非常に良いことです。より良いモデル構造を使用することは、データの重複を減らす1つの方法ですが、将来的には重複したデータを個別に変更する必要がある状況があります。
解決
名前を付けて保存 ModelAdminへの追加を有効にするだけで:
save_as = True
これは、「別の保存して追加」を置き換えます。 「名前を付けて保存」のボタンボタン。 「名前を付けて保存」オブジェクトは、古いオブジェクトではなく、新しいオブジェクトとして(新しいIDで)保存されることを意味します。
他のヒント
ここには、より優れた(組み込みではない)ソリューションがあります:
https://github.com/RealGeeks/django-modelclone
READMEから:
Django Adminには、新しいボタンを追加する
save_as
機能があります。 ページを変更して、そのオブジェクトの新しいインスタンスを保存します。保存するため、この機能の動作が気に入らない 元のオブジェクトの同一のコピー(検証が得られない場合 エラー)そのリンクをクリックするとすぐに、もしあなたが 新しいオブジェクトに必要な小さな変更は、最終的に 既存のオブジェクトの複製。
一方、django-modelcloneは中間ビューを提供します。 基本的にフォームを事前に入力します。変更して保存できます 新しいインスタンス。または、副作用なしで終了します。
このメソッドを適用することもできます: https://stackoverflow.com/a/4054256/7995920
私の場合、「名前」フィールドに一意の制約がある場合、このアクションは機能し、任意のフォームから要求できます。
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)