将抽象模型复制到另一个实例?

时间:2013-05-27 12:09:42

标签: django

我有以下情况:

class AbstractModel(models.Model):
    # fields

    class Meta:
        abstract = True

class A(AbstractModel):
    # no extra fields

class B(AbstractModel):
    # no extra fields

现在我想从A到B保存一行,有没有简单的方法呢? 或者我是否需要自己复制每个字段?

还有更好的方法吗?我需要这个,因为我有一个表可以由用户修改,但另一个是冻结的,从冻结的我创建pdfs,但当我在A类中改变它不应该覆盖类B中的东西,它应该创建一个新的B实例。

2 个答案:

答案 0 :(得分:3)

  

现在我想从A到B保存一行,有没有简单的方法呢?或者我是否需要自己复制每个字段?

您可以使用model_to_dict中的django.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)

答案 1 :(得分:0)

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

但是有一种捷径。

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

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