将django模型实例保存到另一个模型中

时间:2014-12-31 02:47:44

标签: python django django-models

我有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。

2 个答案:

答案 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()