【问题标题】:Saving django model instance into another model将 django 模型实例保存到另一个模型中
【发布时间】:2015-02-27 05:06:41
【问题描述】:

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

【问题讨论】:

    标签: python django django-models


    【解决方案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()
    

    注意:这不处理多对多关系。 M2M 字段应手动复制。

    【讨论】:

    • (field.name, getattr(a, field.name) ) 添加额外的括号以避免语法错误
    【解决方案2】:

    没有任何必要。只需将 id 设置为 None 将导致它保存为新实例。

    a = A.objects.get(id=1)
    a.id = None
    a.save()
    

    【讨论】:

    • 你没有理解这个问题。需要(再次)保存的是模型B。
    猜你喜欢
    • 2021-03-26
    • 2020-05-18
    • 1970-01-01
    • 2019-08-01
    • 2022-10-14
    • 1970-01-01
    • 1970-01-01
    • 2014-01-30
    • 1970-01-01
    相关资源
    最近更新 更多