2016-09-06 3 views
0

私は、Plone 4.3.10にPython 2.7.xを使って敏捷性タイプを書いています。敏捷性の種類のデフォルトの日付を設定する方法schema.datetime?

フィールドのデフォルトの日付をschema.Datetimeに設定します。私はここでの問題は、それdatetime.datetime(2016, 9, 6, 14, 34, 51, 812271)のように、私は私が使用してみましたhttp://docs.plone.org/4/en/external/plone.app.dexterity/docs/advanced/defaults.html

このヒントに従ってくださいそのdatetime.datetime.now()の出力だと思う

Traceback (most recent call last): 
    File "<console>", line 1, in <module> 
    File  "/home/jafar/training/buildout/src/projetime.ged/src/projetime/ged/content/digitalfile.py", line 32, in <module> 
    class IDigitalFile(model.Schema): 
    File "/home/jafar/training/buildout/eggs/plone.supermodel-1.2.7-py2.7.egg/plone/supermodel/model.py", line 67, in __init__ 
    self._SchemaClass_finalize() 
    File "/home/jafar/training/buildout/eggs/plone.supermodel-1.2.7-py2.7.egg/plone/supermodel/model.py", line 74, in _SchemaClass_finalize 
adapter() 
    File "/home/jafar/training/buildout/eggs/plone.supermodel-1.2.7-py2.7.egg/plone/supermodel/directives.py", line 84, in __call__ 
    for fieldName in self.check(): 
    File "/home/jafar/training/buildout/eggs/plone.supermodel-1.2.7-py2.7.egg/plone/supermodel/directives.py", line 76, in check 
    if fieldName not in schema: 
    File "/home/jafar/training/buildout/eggs/zope.interface-3.6.7-py2.7-linux-x86_64.egg/zope/interface/interface.py", line 564, in __contains__ 
    return self.get(name) is not None 
    File "/home/jafar/training/buildout/eggs/zope.interface-3.6.7-py2.7-linux-x86_64.egg/zope/interface/interface.py", line 415, in get 
    attr = attrs.get(name) 
TypeError: Error when calling the metaclass bases 
    unhashable type: 'list' 

import datetime 
agoradatetime = datetime.datetime.now() 

directives.read_permission(uploded_at="cmf.ManagePortal") 
directives.write_permission(uploded_at="cmf.ManagePortal") 
uploded_at = schema.Datetime(
    title=_(u"Data de Upload"), 
    required=True, 
    default=agoradatetime, 
) 

は、私は私はこのエラーを得たdefault=agoradatetimeを設定すると、 :

from DateTime import DateTime 
datenow = DateTime() 

しかし、エラーWrongTypeを持って、怒鳴る参照:

WrongType: (DateTime('2016/09/06 14:39:29.021494 GMT-3'), <type 'datetime.datetime'>, '') 

[UPDATE 2]

は、新しいコードを見て:

# -*- coding: utf-8 -*- 
from plone.app.textfield import RichText 
from plone.autoform import directives 
from plone.namedfile import field as namedfile 
from plone.supermodel.directives import fieldset 
from plone.supermodel import model 
from z3c.form.browser.radio import RadioFieldWidget 
from zope import schema 
from zope.schema.interfaces import IContextAwareDefaultFactory 
from zope.schema.vocabulary import SimpleVocabulary 
from zope.schema.vocabulary import SimpleTerm 
from zope.interface import provider 
from DateTime import DateTime 
from datetime import datetime 

from projetime.ged import _ 

TipoDeDocumentoVocabulary = SimpleVocabulary(
    [SimpleTerm(value=u'processo', title=_(u'Processos')), 
    SimpleTerm(value=u'contratos', title=_(u'Contratos')), 
    SimpleTerm(value=u'outros', title=_(u'Outros'))] 
) 

def nowDateTime(): 
    zope_dt = DateTime().asdatetime() 
    python_dt = datetime.today() 

    return python_dt 

class IDigitalFile(model.Schema): 
    """Dexterity-Schema 
    """ 

    directives.widget(TipoDeDocumento=RadioFieldWidget) 
    TipoDeDocumento = schema.Choice(
     title=_(u"Tipo de Documento"), 
     vocabulary=TipoDeDocumentoVocabulary, 
     required=True 
    ) 

    titulo = schema.TextLine(
     title=_(u"Título"), 
     required=True 
    ) 

    codDoDocumento = schema.TextLine(
     title=_(u"Cód. do Documento"), 
     required=False 
    ) 

    CpfCnpj = schema.TextLine(
     title=_(u"CPF/CNPJ"), 
     required=False 
    ) 

    Assunto = schema.TextLine(
     title=_(u"Assunto"), 
     required=True 
     ) 

    Tipo = schema.TextLine(
     title=_(u"Tipo"), 
     required=False 
    ) 

    Descricao = schema.Text(
     title=_(u"Descrição"), 
     required=True 
    ) 

    fieldset('file', fields=['Arquivo']) 
    Arquivo = namedfile.NamedBlobFile(
     title=_(u"Arquivo Digitalizado"), 
     required=True 
    ) 

    directives.omitted(['Automatico', 'uploded_at']) 
    directives.read_permission(Automatico="cmf.ManagePortal") 
    directives.write_permission(Automatico="cmf.ManagePortal") 
    directives.widget(Automatico=RadioFieldWidget) 
    Automatico = schema.Bool(
     title=_(u"Upload via Script?"), 
     required=True, 
     default=True, 
    ) 

    directives.read_permission(uploded_at="cmf.ManagePortal") 
    directives.write_permission(uploded_at="cmf.ManagePortal") 
    uploded_at = schema.Datetime(
     title=_(u"Data de Upload"), 
     required=True, 
     defaultFactory=nowDateTime, 
    ) 

documentaionは言う:Pythonの日時:HereHereを。

しかし、私はエラーだ:だから私は必要なもの

TypeError: Error when calling the metaclass bases 
unhashable type: 'list' 

を?私はユーザーがPloneでContentTypeの敏捷性を作成するときに、フィールドuploaded_atを "date and time now"で構築する必要があります。

[UPDATE 3]

FULL TRACEBACK

>>> from projetime.ged.content.digitalfile import IDigitalFile 
Traceback (most recent call last): 
File "<console>", line 1, in <module> 
File "/home/jafar/training/buildout/src/projetime.ged/src/projetime/ged/content/digitalfile.py", line 37, in <module> 
class IDigitalFile(model.Schema): 
File "/home/jafar/training/buildout/eggs/plone.supermodel-1.2.7-py2.7.egg/plone/supermodel/model.py", line 67, in __init__ 
self._SchemaClass_finalize() 
File "/home/jafar/training/buildout/eggs/plone.supermodel-1.2.7-py2.7.egg/plone/supermodel/model.py", line 74, in _SchemaClass_finalize 
adapter() 
File "/home/jafar/training/buildout/eggs/plone.supermodel-1.2.7-py2.7.egg/plone/supermodel/directives.py", line 84, in __call__ 
for fieldName in self.check(): 
File "/home/jafar/training/buildout/eggs/plone.supermodel-1.2.7-py2.7.egg/plone/supermodel/directives.py", line 76, in check 
if fieldName not in schema: 
File "/home/jafar/training/buildout/eggs/zope.interface-3.6.7-py2.7-linux-x86_64.egg/zope/interface/interface.py", line 564, in __contains__ 
return self.get(name) is not None 
File "/home/jafar/training/buildout/eggs/zope.interface-3.6.7-py2.7-linux-x86_64.egg/zope/interface/interface.py", line 415, in get 
attr = attrs.get(name) 
TypeError: Error when calling the metaclass bases 
unhashable type: 'list' 
+0

このトレースバックは 'default'の使用には関係しません。これは、あなたが私たちに見せてくれなかった部分のコードや、あなたのインターフェースが拡張している別のインターフェースの問題が原因である可能性があります。 Lucaの答えは、 'defaultFactory'を使用して、日付がインポート時ではなく実行時に計算されることを確認することを指摘するのは正しいです。 –

答えて

0

あなたがはっきりdefaultFactoryなくdefaultを使用し、使用する値を取得するために呼び出される関数である必要があります使用ドキュメントリンク必要になるたびにデフォルトに設定されます。 私の提案はdefaultFactoryも使用することです。ところで

agoradatetimeは平均がZopeので、一度計算日時であることを、モジュールレベルで計算される:defaultが動作していないが、それが働いた場合でも、結果はおそらく予期しないものになるだろう、なぜ私は知りません起動。

+0

私はそれを行い、エラー 'unhashable type: 'list''を得ました。質問欄を更新しました。 –

+0

@JulianoAraújouhm ...この新しい完全なトレースバックを提供できますか? –

+0

完全なトレースバックが "section" [update 3]に投稿されました –

関連する問題