環境
- django 3.0.3
まるまるコピー
インスタンスのid
を空にして保存したら、新規で登録できます。
product = Product.objects.get(pk=id)
product.id = None
product.save()
テキストを変更してコピー
商品タイトルを変更したい場合は、商品タイトルを上書きして保存。
product = Product.objects.get(pk=id)
product.id = None
product.title = "商品名2"
product.save()
色々加工してオブジェクトのコピー
ここでは以下のことをしています。
- 元のオブジェクトからデータを引き継いで一部加工
- リレーションは改めて登録
- sku(商品固有、関数実行)の値を変更
from django.forms import model_to_dict
copy = Product.objects.get(pk=id)
# リレーションと変更したいカラムは除外しておく
kwargs = model_to_dict(copy, exclude=['id', 'shop', 'title', 'sku'])
product = Product.objects.create(
title=copy.title + ' のコピー', # 元のオブジェクトからデータを引き継いで一部加工
shop_id=copy.shop_id,
sku=uuid.uuid4(), # 関数実行した結果の値
**kwargs
)