如何复制Django Polymorphic对象?

时间:2018-01-30 00:58:03

标签: django django-polymorphic

使用django-polymorpic模块是一种简化对象继承的好方法,其中许多子类都从一个基类继承并与其共享多个属性。但是,虽然几乎所有东西都像普通对象一样,但是消除.pk并调用save()的方法不起作用?我试过了:

o = MyPolymorphicSubTable.objects.first()
print(o.pk) # 22
o.pk = None
o.save()
print(o.pk) # still 22 -- still the same object

还尝试过:

print(o.id) # 22
o.id = None
o.save()
print(o.id) # still 22

任何人都有答案?

1 个答案:

答案 0 :(得分:2)

在一个关于多态github问题的旧问题中有一个答案提示,最后找到答案。对象的id(22)存储为.id(基表id),也存储为.basetablename_ptr(在我的情况下,' sectioninfo_ptr') - 后者不可设置但是.pk引用相同的字段, 可设置,因此这两种方法都需要合并:

o = MyPolymorphicSubTable.objects.first()
print(o.pk) # 22
o.pk = None
o.id = None # both this and the previous line need to be there
o.save()
print(o.pk) # 434
print(o.id) # 434