我将现有模型分类。我希望现在有许多父类的成员成为子类的成员。
例如,我有一个Swallow模型。现在,我正在制作EuropeanSwallow(Swallow)和AfricanSwallow(Swallow)。我想带一些但不是全部的Swallow对象使它们成为EuropeanSwallow或AfricanSwallow,具体取决于它们是否迁移。
我该如何移动它们?
最佳答案
我知道这要晚得多了,但是我需要做类似的事情并且找不到很多东西。我发现答案隐藏在某些源代码here中,但是还编写了一个示例类方法就足够了。
class AfricanSwallow(Swallow):
@classmethod
def save_child_from_parent(cls, swallow, new_attrs):
"""
Inputs:
- swallow: instance of Swallow we want to create into AfricanSwallow
- new_attrs: dictionary of new attributes for AfricanSwallow
Adapted from:
https://github.com/lsaffre/lino/blob/master/lino/utils/mti.py
"""
parent_link_field = AfricanSwallow._meta.parents.get(swallow.__class__, None)
new_attrs[parent_link_field.name] = swallow
for field in swallow._meta.fields:
new_attrs[field.name] = getattr(swallow, field.name)
s = AfricanSwallow(**new_attrs)
s.save()
return s
但是,我不知道如何使表单验证与该方法一起使用。因此肯定可以进一步改进;可能意味着数据库重构可能是最好的长期解决方案...