如何复制 Django 多态对象?

How to copy a Django Polymorphic object?

使用 django-polymorpic 模块是简化对象继承的好方法,其中许多子 class 都继承自一个基 class,并与之共享多个属性.但是,虽然几乎所有东西都像普通对象一样工作,但擦除 .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

有人有答案吗?

关于多态github问题的旧issue中有一个答案的提示,终于找到了答案。对象的 id (22) 存储为 .id(基础 table id)和 .basetablename_ptr(在我的例子中,'sectioninfo_ptr')——后者未设置table但.pk引用相同的字段,而设置table,因此需要将这两种方法结合起来:

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