Pergunta

Eu tenho um tipo de conteúdo em Plone. Possui vários campos, incluindo um campo de arquivo. Quando o usuário edita um objeto desse tipo, como posso saber se um novo arquivo foi enviado?

Por esse motivo, como posso saber se algum dos campos foi alterado?

Atualmente, estou usando os assinantes para conectar -me ao IObjecteditedEvent para fazer alguns depois que as mudanças de objeto - posso fazer essas coisas aqui?

Foi útil?

Solução

Sim, IObjectEditedEvent (uma subclasse direta de IObjectModifiedEvent) é emitido quando um objeto de conteúdo de arquétipos está sendo alterado.

No entanto, o evento em si não informará se um novo arquivo foi enviado. No entanto, deve ser possível obter a solicitação (context.request deve fornecer a solicitação atual por meio da aquisição, por exemplo) e ver se existe um objeto de arquivo que corresponde ao campo. Nesse caso, o usuário enviou um novo arquivo para esse campo e o FileField terá sido atualizado.

Outras dicas

Aqui está o que vi ao iObjecteditedEvent:

Usando o formulário padrão criado a partir da subclassing Atblob, implementando (iatblobfile, iatfile, ifileContent)

def editObjectEvent(context, event):
    status = context.REQUEST.form.get('file_delete')
    if status in ("nochange", NONE):
        print "Don't do anything, no change to file."
    else:
        print "Do something, the file has changed"

Eu gostaria de saber que outros valores form['file_delete'] podem ter. Parece útil.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top