Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 复制从抽象模型(Django)派生的类的所有字段_Python_Django_Django Models - Fatal编程技术网

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

Python 复制从抽象模型(Django)派生的类的所有字段,python,django,django-models,Python,Django,Django Models,我有两个模型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的对象,我

我有两个模型
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将一个对象的所有字段复制到另一个对象的正确方法是什么


我知道的唯一方法是枚举一个对象的所有字段(顺便说一句,怎么做?),并将它们存储在另一个对象中。但是有更简单的方法吗?

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