我有一个可以描述为的模型:
元素: - element具有ElementData
的一对一字段elementData中: - 它具有到ElementImage的ForeignKey - 它描述了默认图像
ElementImage: - 它有ElementK的ForeignKey
ElementVideo: - 它对ElementData
有foreignKey现在我希望克隆元素和所有子表。我尝试使用我发现here的代码段。我将此函数放到Element和ElementData中,当我在元素中尝试克隆ElementData时,我有约束违规。有人能帮助我吗?
答案 0 :(得分:3)
因为Element与ElementData有OneToOne关系,所以在克隆Element之前需要克隆ElementData。像这样:
class Element(...):
def clone(self):
new_kwargs = dict([(fld.name, getattr(old, fld.name)) for fld in old._meta.fields if fld.name != 'id']);
new_data = self.data.clone()
new_kwargs['data'] = new_data
return self.__class__.objects.create(**new_kwargs)
答案 1 :(得分:1)
我的解决方案:
def clone(self):
old = self
images = old.element_data.images.all()
videos = old.element_data.videos.all()
element_data = self.element_data
element_data.id = None
element_data.save()
for image in images:
image.id = None
image.element_data = element_data
image.save()
for video in videos:
video.id = None
video.element_data = element_data
video.save()
new_kwargs = dict([(fld.name, getattr(old, fld.name)) for fld in old._meta.fields if fld.name != 'id']);
new_kwargs['element_data'] = element_data
return self.__class__.objects.create(**new_kwargs)
请写下您对此的看法