我有两个模型 A 和 B,它们的结构相同,源自相同的抽象模型:
class CommonInfo(models.Model):
name = models.CharField(max_length=100)
# ... # more fields
class Meta:
abstract = True
class A(CommonInfo):
pass
class B(CommonInfo):
pass
现在有了一个 A 类的对象,我想创建一个具有相同字段值的 B 类对象。
将一个对象的所有字段复制到另一个对象的正确 Django 方法是什么?
我知道的唯一方法是枚举一个对象的所有字段(顺便问一下,怎么做?)并将它们存储在另一个对象中。但是有更简单的方法吗?
请您参考如下方法:
您可以使用 model_to_dict(..) 并在构造 B 对象时使用此字典,例如:
from django.forms.models import model_to_dict
my_b = B(**model_to_dict(
my_a,
fields=[f.name for f in CommonInfo._meta.fields],
))
# some processing
my_b.save()
请注意,如果 CommonInfo 包含对象的外键,则将复制这些引用,但不会构造新的引用对象。此外,这不适用于多对多字段,因此您需要排除这些字段(并稍后添加相关对象)。
