2011-09-22 5 views
1

내 페이지 모델의 인스턴스를 복사하고 새 페이지의 상태를 "초안"으로 설정하려고합니다. 이 코드는 Django 쉘에서 완벽하게 작동하지만 관리자 액션이있는 곳에서는 새로운 인스턴스가 생성되지만 상태는 업데이트되지 않습니다.모델 인스턴스 복사 및 필드 업데이트

위의 코드는 새 페이지를 만들지 만 상태는 변경하지 않습니다.

상태 (PublishedPage, DraftPage 등)에 따라 프록시 모델이있는 페이지와 관련이있을 수 있습니다. 문제는 무엇인지 잘 모르겠습니다.

+0

모든 속성이 설정되기 전에 왜'page.save()'가 필요합니까? –

+0

기본 키가없는 모델을 저장하지 않았는지 확인하려고했습니다. – tocf

+0

"기본 키가없는 모델을 저장하지 않았습니까?" Django의 ORM은 존재하지 않을 때 당신을위한 키를 생성합니다. 그리고 존재할 때 업데이트합니다. –

답변

1

하지 마십시오.

for page in pages: 
    new_page= Page.objects.create(
     this= page.this, that=page.that, ... 
     status= Page.DRAFT) 

훨씬 더 간단합니다. 훨씬 더 명확 해. 실제로 작동합니다.

+0

페이지의 스키마가 변경된 경우이 코드를 변경할 필요가없는 솔루션을 기대했습니다. – tocf

+0

@tocf : "페이지의 스키마가 변경된 경우"이 코드를 변경할 필요가 없습니다. 일반적으로 달성 할 수 없습니다. 코드를 최소화한다는 아이디어는 매력적인 성가신 요소입니다. 스키마 변경은 항상 코드 변경으로 이어집니다. 그렇지 않으면 왜 스키마를 변경해야합니까? –

+0

그래, 모델에도 _lot_ 개의 필드가 있습니다. – tocf

0

페이지를 서브 클래 싱하는 프록시 모델에 내 업데이트를 재정의하는 사용자 지정 저장 메서드가있는 것으로 나타났습니다.