相关疑难解决方法(0)

867
推荐指数
8
解决办法
61万
查看次数

重复的Django模型实例和指向它的所有外键

我想在Django模型上创建一个方法,调用它model.duplicate(),复制模型实例,包括指向它的所有外键.我知道你可以这样做:

def duplicate(self):
   self.pk = None
   self.save()
Run Code Online (Sandbox Code Playgroud)

...但是这样所有相关模型仍然指向旧实例.

我不能简单地保存对原始对象的引用,因为self在执行方法期间指向更改的内容:

def duplicate(self):
    original = self
    self.pk = None
    self.save()
    assert original is not self    # fails
Run Code Online (Sandbox Code Playgroud)

我可以尝试保存对相关对象的引用:

def duplicate(self):
    original_fkeys = self.fkeys.all()
    self.pk = None
    self.save()
    self.fkeys.add(*original_fkeys)
Run Code Online (Sandbox Code Playgroud)

...但是这会将它们从原始记录转移到新记录.我需要将它们复制并指向新记录.

其他地方的几个答案(在此之前我更新了问题)建议使用Python copy,我怀疑它适用于此模型上的外键,但不适用于指向它的另一个模型上的外键.

def duplicate(self):
    new_model = copy.deepcopy(self)
    new_model.pk = None
    new_model.save()
Run Code Online (Sandbox Code Playgroud)

如果你这样做new_model.fkeys.all()(到目前为止遵循我的命名方案)将是空的.

python django python-2.7

9
推荐指数
1
解决办法
3454
查看次数

标签 统计

python ×2

dictionary ×1

django ×1

python-2.7 ×1