Skip to main content
 首页 » 编程设计

python之复制从抽象模型派生的类的所有字段 (Django)

2024年12月31日21Free-Thinker

我有两个模型 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 包含对象的外键,则将复制这些引用,但不会构造新的引用对象。此外,这不适用于多对多字段,因此您需要排除这些字段(并稍后添加相关对象)。