2016-09-06 2 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 말 : 파이썬 날짜 시간 : HereHere을.

하지만 오류가있어 :

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

그래서 내가 필요가있는 무엇을? 나는 사용자가 Plone에서 Contenttype Dexterity를 ​​만들 때 필드 "uploaded_at"을 "날짜와 시간"으로 구성해야합니다.

[UPDATE 3]

FULL

>>> 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도 사용하는 것입니다.

은 BTW : default가 작동하지 않는 이유는 모르겠지만,이 일을해도 결과는 아마 예상하지 못한 일이 될 것입니다 다음 agoradatetime모듈 수준에서 계산, 즉 평균 조프에 한 번 계산 된 날짜입니다 시작.

+0

나는 그것을하고, 오류'unhashable 유형 : 'list'', 나는 질문 게시를 업데이 트했습니다. –

+0

@ JulianoAraújo uhm ...이 새로운 전체 추적을 제공 할 수 있습니까? –

+0

전체 추적이 "section"[update 3]에 게시 됨 –

관련 문제