如何复制 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
使用 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