我有2个从抽象模型继承的模型。我使用一个用于相关数据,另一个用于存档数据。他们有相同的领域和方法。我想在模型A上创建一个post_save信号,这样每当创建一个新记录时,就会在模型B中创建一个实例,到目前为止,那里的选项并不是很优雅:
a = A.objects.get(id=1)
b = B()
model_dict = a.__dict__
model_dict.pop('id')
b.__dict__ = model_dict
b.save()
有更好的方法来实现这一目标吗?
注意:这些模型包含外键,因此,django.forms下的model_to_dict函数不起作用,因为它只提供相关对象的id。
答案 0 :(得分:1)
我认为迭代字段列表是更可预测的方式:
a = A.objects.get(id=1)
data = dict([field.name, getattr(a, field.name) for field in a._meta.fields])
b = B(**data)
b.pk = None
b.save()
注意:这不处理ManyToMany关系。应手动复制M2M字段。
答案 1 :(得分:0)
没有必要这样做。只需将id设置为None,即可将其另存为新实例。
a = A.objects.get(id=1)
a.id = None
a.save()