Hi all,
I'm trying to figure out the easiest way to get fields holding Files or Images in my content type class.


I've tried the following:
I've tried using the Object field specifying the zope.app.file.interfaces.IFile as the schema and then
implement a CustomWidgetFactory with zope.app.file.file.File
as the factory.

This actually looks ok both in the AddView and the EditView
but the updates fail (due to cPickle.UnpickleableError: Cannot pickle <type 'zope.security._proxy._Proxy'> objects, which sounds like the
File object needs to be removed from it's proxy somewhere in the chain?)

Any thought on how to solve this problem (my approach or other approach)?

Regards,
Johan


Here is my code (which uses the Poll as base, that stuff has been removed though):

interfaces.py:

  from zope.interface import Interface
  from zope.schema import Object
  from zope.app.file.interfaces import IFile

  from zope.i18n import MessageIDFactory
  _ = MessageIDFactory('poll')

  class IPoll(Interface):

      file=Object(IFile, title=_('File'))

poll.py:

  from persistent import Persistent
  from interfaces import IPoll
  from zope.interface import implements, classImplements
  from zope.app.file.file import File

  class Poll(Persistent, object):
      implements(IPoll)

      file=None


browser.py:

  from zope.interface import implements
  from zope.app.form.browser.editview import EditView
  from zope.app.form.browser.add import AddView
  from zope.app.form import CustomWidgetFactory
  from zope.app.form.browser import ObjectWidget

  from interfaces import IPoll


  from zope.app.file.file import File

  fw = CustomWidgetFactory(ObjectWidget, File)

  class PollEditView(EditView):
      __used_for__ = IPoll

      file_widget = fw

  class PollAddView(AddView):
      __used_for__ = IPoll

      file_widget = fw

configure.zcml:

<configure xmlns="http://namespaces.zope.org/zope";
    xmlns:browser="http://namespaces.zope.org/browser";
    i18n_domain="poll">

  <content class=".poll.Poll">
  <factory id="zope.app.demo.poll2" />

  <implements
    interface="zope.app.annotation.interfaces.IAttributeAnnotatable"
    />

  <require
    permission="zope.View"
    interface=".interfaces.IPoll"
    />

  <require
    permission="zope.ManageContent"
    set_schema=".interfaces.IPoll"
    />
  </content>

  <browser:addform
    schema=".interfaces.IPoll"
    label="Add a Poll"
    content_factory=".poll.Poll"
    name="AddPoll2.html"
    class=".browser.PollAddView"
    permission="zope.ManageContent" />

  <browser:addMenuItem
    title="Poll 2 Demo"
    description="Poll 2 Demo"
    class=".poll.Poll"
    view="AddPoll2.html"
    permission="zope.ManageContent"
    />

  <browser:editform
    schema=".interfaces.IPoll"
    class=".browser.PollEditView"
    label="Change a Poll"
    name="edit.html"
    menu="zmi_views" title="Edit"
    permission="zope.ManageContent" />
</configure>




--
Johan Carlsson          Tel: + 46 8 31 24 94
Colliberty              Mob: + 46 70 558 25 24
Torsgatan 72            Email: [EMAIL PROTECTED]
SE-113 37 STOCKHOLM

_______________________________________________
Zope3-users mailing list
Zope3-users@zope.org
http://mail.zope.org/mailman/listinfo/zope3-users

Reply via email to