2011-11-01 4 views
4

두 번째 개체 (object2 - 새 개체의 부모가 아님)의보기에서 (archetypes) 개체를 만들어야합니다. 요청object2의 데이터가 미리 채워 져야합니다.Portal_factory에서 Plone 객체를 만들고 채우려면 어떻게해야합니까?

단순한 해결책은 스키마 필드에 "default_method"을 사용하는 것으로 보이며 요청의 데이터에서 작동 할 수 있지만 거기에서보기에 대한 액세스 권한이 없다고 생각됩니다. 따라서 object2이 아닙니다. 어쨌든 필드 중 하나가 object2의 ReferenceField이고 ReferenceField가 "default_method"를 무시한다는 것을 읽었습니다.

다른 옵션은 기본값을 설정 한 다음 추가 페이지를 표시하여 사용자가 필요에 따라 내용을 수정하거나 실제로 객체를 만들지 않고 종료 할 수 있도록 허용하는 것입니다. 객체를 생성하는 데 사용할 수있는 여러 가지 메소드 중 완벽한 것을 제외하고는 (invokeFactory(), _createObjectByType(), _constructInstance() & createObject()) 실제로는 createObject 만 객체를 portal_factory에 남겨 둡니다. 개체의 추가 페이지 URL), 키워드 인수를 허용하지 않으며 모든 이벤트 (분명히 IObjectCreatedEvent가 아님)를 알리는 것 같지 않습니다. 사용자를 편집 페이지로 안내하기 전에 데이터를 수정하는 방법을 볼 수 없습니다 .

답변

4

는 CreateObject를를 사용할 수없는 경우 내가 추천하는 패턴이다. 나는 또한 URL 생성에 대해 알고 싶다. 요청에서 folder.createObject를 얻는 방법을 알려주시겠습니까?
+1

아주 좋습니다. 고마워요. 내가하고 있었던 것보다 훨씬 더 청결한. – Auspex

4

도. 마침내 알아 냈어.

createObject은 실제 의미에서 개체를 만듭니다. 실제로는 작성 양식에 대한 URL 일뿐입니다.

url = folder.createObject(type_name='xxx') 
url += ?title=abc&description=def...' 
self.request.RESPONSE.redirect(url) 

이 그것을 할 것입니다 :

전화 .createObject()는 쿼리 매개 변수로 원하는 값을 첨부 형태의 URL을 얻을.

_id = self.context.generateUniqueId("Document") 
_id = self.context.invokeFactory(type_name=type_name, id=_id) 
ob = self.context[_id] 
ob.edit(
    description = "text...", 
    subject  = ('tag1', 'tag2'), 
    title  = "some title...", 
) 
ob._renameAfterCreation(check_auto_id=True) 
_id = ob.getId() 
+0

안녕 Auspex, 나는 플론 (Plone)에 새로운 오전 : –

+0

이것이 4½ 년이 된 것을 알았습니까? 그때와 지금 사이에 어딘가에 나 자신을 플론 전문가라고 생각했을 것입니다. 하지만 Plone을 만진 지 3 년이되었습니다 ... Tiberiu의 방법은 갈 길입니다. – Auspex

관련 문제