django new model instance by copy

2022-08-12 12:38:54 浏览数 (1)

要件:

复制一条既存的数据,作成多条新数据

解决:

代码语言:python代码运行次数:0复制
pl = Pl.objects.get(pk=1)     # 找一条数据
npl=pl                         # 复制
npl.pk=None                    # 主键清空
npl.save()                     # 保存一个新的对象

应用例

parent model:Product

child model:ProductList

给每一个Product做一条ProductList数据

代码语言:python代码运行次数:0复制
>>> from .models import ProductList, Product
>>> pl = ProductList.objects.get(pk=1)        # 复制一条数据
>>> products = Product.objects.all()          # product为productlist 的外键
>>> for p in products:
...     newpl=ProductList()
...     newpl=pl          # 复制
...     newpl.product = p        # 登录外键
...     newpl.pk=None            # 主键清空 ,若不清空主键,newpl与pl指向同一地址,每次loop只会更新pl
...     newpl.save()
>>> 

model参照

代码语言:python代码运行次数:0复制
class ProductList(BaseModel):
    product = models.ForeignKey(Product, verbose_name='商品', on_delete=models.SET_NULL, null=True)
    code    = models.CharField(verbose_name='コード', max_length=20, default="")

0 人点赞