我有以下情况:
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实例。
答案 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()
但是它的无证方法,也有自己的风险!