【问题标题】:How to copy a Django Polymorphic object?如何复制 Django 多态对象?
【发布时间】:2018-07-08 19:16:23
【问题描述】:
使用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
谁有答案?
【问题讨论】:
标签:
django
django-polymorphic
【解决方案1】:
在多态github问题上的一个老issue里有提示,终于找到答案了。对象的 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