我有两个结构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将一个对象的所有字段复制到另一个对象的正确方法是什么?
我知道的唯一方法是枚举一个对象的所有字段(顺便说一句,怎么做?)并将它们存储在另一个对象中。但是有没有更简单的方法?
答案 0 :(得分:1)
您可以使用Traceback (most recent call last):
File "C:/Users/SawyerPC/PycharmProjects/DiscordSocialGraph/encode_and_train.py", line 129, in <module>
enc, clf, split_data = encode_and_train(df)
File "C:/Users/SawyerPC/PycharmProjects/DiscordSocialGraph/encode_and_train.py", line 57, in encode_and_train
svc.fit(X_train, y_train) # TODO y_train needs to be flattened to (n_samples,)
File "C:\Users\SawyerPC\Anaconda3\lib\site-packages\sklearn\svm\base.py", line 149, in fit
X, y = check_X_y(X, y, dtype=np.float64, order='C', accept_sparse='csr')
File "C:\Users\SawyerPC\Anaconda3\lib\site-packages\sklearn\utils\validation.py", line 547, in check_X_y
y = column_or_1d(y, warn=True)
File "C:\Users\SawyerPC\Anaconda3\lib\site-packages\sklearn\utils\validation.py", line 583, in column_or_1d
raise ValueError("bad input shape {0}".format(shape))
ValueError: bad input shape (5000, 10)
并在构造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()
包含对象的外键,则将复制这些引用,但不会构造新的引用对象。此外,这对许多字段都不起作用,因此您需要排除这些字段(并在以后添加相关对象)。