2013-05-27 1 views
2

나는 다음과 같은 상황이 : 추상 모델을 다른 인스턴스에 복사 하시겠습니까?

class AbstractModel(models.Model): 
    # fields 

    class Meta: 
     abstract = True 

class A(AbstractModel): 
    # no extra fields 

class B(AbstractModel): 
    # no extra fields 

지금 내가 A에서 B로 하나 개의 행을 저장할

, 그것을 할 수있는 쉬운 방법이 있습니까? 또는 모든 필드를 자체적으로 복사해야합니까?

이 작업을 수행하는 데 더 좋은 방법이 있습니까? 이 필요, 나는 사용자가 수정할 수있는 하나의 테이블을 가지고 있기 때문에, 다른 하나는 동결 된 하나에서 나는 PDF 파일을 만들지 만, 내가 클래스 A에서 뭔가를 변경하면 클래스 B에서 무언가를 오버라이드해서는 안된다.

답변

3

이제 A부터 B까지 한 행을 저장하고 싶습니다. 쉬운 방법이 있습니까? 또는 모든 필드를 자체적으로 복사해야합니까?

당신은 초기 kwargs로는 DICT 생성 django.forms에서 model_to_dict를 사용할 수 있습니다

모델이 20 개 필드처럼 가지고 있으며, 일부 ForeignKeys를가 삭제되지해야하기 때문에, 정말 멋진 아니다
from django.forms import model_to_dict 
a = A.objects.get(..) 
kwargs = model_to_dict(a) 
kwargs.pop('id') 
b = B.objects.create(**kwargs) 
+0

당신의 대답은 위와 동일하다고 생각합니다. (나는 희망한다) 나는 양쪽 다 upvote 할 것이다. 그러나 나는 나의 평판 때문에 할 수 없다. 죄송합니다. 여전히 +1 –

0

B의 새 인스턴스에서 각 필드를 복사 한 다음 저장해야합니다.

하지만 바로 가기 방법이 있습니다.

b_obj.__dict__ = a_obj.__dict__ 
#remove any foreign key/id/default fields 
b_obj.__dict__.pop('id') 
... 
b_obj.save() 

그러나 문서화되지 않은 방법이므로 자체 위험이 있습니다!

+0

. 다른 모델이나 다른 것을 인스턴스화 할 수 있기를 바랬습니다. 이게 작동하지 않을 것 같지 않아요. –

관련 문제