3

我有以下情况:

class AbstractModel(models.Model):
    # fields

    class Meta:
        abstract = True

class A(AbstractModel):
    # no extra fields

class B(AbstractModel):
    # no extra fields

现在我想将一行从 A 保存到 B,有简单的方法吗?还是我需要自己复制每个字段?

还有更好的方法吗?我需要这个,因为我有一个可以由用户修改的表,但是另一个表被冻结了,从冻结的表中我创建了 pdf,但是当我更改 A 类中的某些内容时,它不应该覆盖 B 类中的某些内容,它应该创建一个 B 的新实例。

4

2 回答 2

4

现在我想将一行从 A 保存到 B,有简单的方法吗?还是我需要自己复制每个字段?

您可以使用model_to_dictfromdjango.forms生成初始 kwargs 字典:

from django.forms import model_to_dict
a = A.objects.get(..)
kwargs = model_to_dict(a)
kwargs.pop('id')
b = B.objects.create(**kwargs)
于 2013-05-27T12:23:06.727 回答
0

您应该必须复制新实例中的每个字段,B然后保存它。

但是有一个捷径。

b_obj.__dict__ = a_obj.__dict__
#remove any foreign key/id/default fields
b_obj.__dict__.pop('id')
...
b_obj.save()

但是它的无证方法,所以有它自己的风险!

于 2013-05-27T12:18:44.473 回答