2015-11-12 77 views
2

我有以下代碼,旨在以編程方式將關係值分配給自定義內容類型。重新啓動時丟失一些z3c關係數據

publications = # some data 

catalog = getToolByName(context, 'portal_catalog') 
for pub in publications: 
    if pub['custom_id']: 
    results = catalog(custom_id=pub['custom_id']) 
    if len(results) == 1: 
     obj = results[0].getObject() 
     measures = [] 
     for m in pub['measure']: 
     if m in context.objectIds(): 
      m_id = intids.getId(context[m]) 
      relation = RelationValue(m_id) 
      measures.append(relation) 
     obj.measures = measures 
     obj.reindexObject() 
     notify(ObjectModifiedEvent(obj)) 

架構自定義內容類型

measures = RelationList(
    title=_(u'Measure(s)'), 
    required=False, 
    value_type=RelationChoice(title=_(u'Measure'), 
          source=ObjPathSourceBinder(object_provides='foo.bar.interfaces.measure.IMeasure')), 
) 

的摘錄當我運行我的腳本一切看起來都不錯。問題是當我的自定義內容模板嘗試調用「pub/from_object/absolute_url」時,該值爲空 - 僅在重新啓動後。有趣的是,我可以在重新啓動後獲得pub/from_object的其他屬性,而不是它的URL。

+2

你如何運行腳本?像「斌/實例運行script.py」?然後你需要提交更改。即使你沒有存儲任何東西,屬性'from_object'就在那裏。 – Mathias

+0

@Mathias它在一個BrowserView中,它應該處理提交,但我嘗試添加transaction.commit()並沒有什麼區別。並澄清,我可以做pub/from_object /標題,它的工作原理,我不能得到pub/from_object/absolute_url。就好像它在重啓時失去了上下文。 – Esoth

回答

6

from_object從關係目錄中檢索引用對象,但不會將對象放回適當的Acquisition鏈中。請參閱http://docs.plone.org/external/plone.app.dexterity/docs/advanced/references.html#back-references以瞭解應該如何工作的方法。

+0

其實plone.app.relationfield猴子修補程序RelationValue.from_object使它自動執行,所以我不知道爲什麼這不適合你。也許那個猴子補丁由於某種原因沒有被加載? –

+2

我必須爲這個項目使用Plone 4.1,它已經添加了一個版本的plone.app.relationfield作爲猴子補丁。您引用的文檔提供了一個可行的解決方案,謝謝! – Esoth

相關問題