Pythonのmodelsのデータをコピー、複製する方法

今回はPythonのmodelsのデータをコピー、複製する方法についてご紹介いたします。



Pythonのmodelsのデータをコピー、複製する方法

「Python manage.py shell」でmodelsを複製したいと思ったときに意外とコピーするための関数がありません。

片っ端からobjects.createでフィールドに値を入れていくのも面倒で困る状況があるかと思います。

しかしながら、3つくらいのコマンドで簡単にmodelsを複製する裏技があるのです。

例として”Products”ディレクトリの配下に次のmodels.pyがあるとします。
各フィールドは今回の趣旨とは関係ありません。フィールドの内容はなんでもいいです。

「Python manage.py shell」で次のコマンドを打ちます。

すると変数"p"にProductのobjectsの一番最初のインスタンスが代入されますよね。
ちなみに今p.idの値は素直に1です。

続いて次のコマンドを打ちます。

p.id=Noneと打つのはためらわれるかもしれませんが、p.id=Noneにしてp.save()とするとなんとpが新しいインスタンスに変わるのです。

コマンドを打つ前はlen(Product.objects.all())の値は6ですが、
p.id=None
p.save()
と打つとlen(Product.objects.all())の値が7となり、
p.id
と打ってみると7が返ってきます。
Pythonのmodelsのデータをコピー、複製する方法

つまり、
p.id=None
p.save()
とidをNoneにしてsaveした時点で"p"が新しいインスタンスに変わるのです。

以上、Pythonのmodelsのデータをコピー、複製する方法でした。

終わりに

今回はPythonのmodelsのデータをコピー、複製する方法についてお伝えいたしました。

しかしながら、原因は不明ですが上記の方法でもコピーができないmodelsの構造があります。

ただし大多数のmodelsにおいて上記の方法でmodelsのコピーが可能です。

みなさんもぜひお試しください。

最後までお読みいただきありがとうございます。
よろしければブログやTwitterでのシェアをお願いしております。
コメントもお待ちしております。
誤植や勘違いなどございましたらコメント欄にて教えていただけると幸いです。

直接契約ができるフリーランスエージェント「エンハンス」を立ち上げました。
詳しくは下記LPをご参照ください。
https://enhance.decryption.co.jp/

Youtubeチャンネル開設いたしました。
チャンネル登録者10,000人を目指しているので、良いと思った方はチャンネル登録をお願いしたいです。
https://www.youtube.com/channel/UC219XhmSRxmXltTy6COxSMw






Python

Posted by ちこ