2009-12-28 19 views
2

J'ai un type de contenu AT dans Plone. Il a un certain nombre de champs, y compris un champ de fichier. Lorsque l'utilisateur édite un objet de ce type, comment puis-je savoir si un nouveau fichier a été téléchargé? D'ailleurs, comment puis-je savoir si l'un des champs a été modifié?Comment puis-je savoir si un champ a changé de valeur dans un objet AT dans plone?

Je suis actuellement en train d'utiliser des abonnés pour se connecter à IObjectEditedEvent pour en faire après que l'objet ait changé - puis-je faire ces choses ici?

Répondre

1

Oui, IObjectEditedEvent (une sous-classe directe de IObjectModifiedEvent) est émise lors de la modification d'un objet de type Archétypes. Cependant, l'événement lui-même ne vous dira pas si un nouveau fichier a été téléchargé. Il devrait cependant être possible d'obtenir la requête (context.REQUEST devrait vous donner la requête en cours par acquisition, par exemple) et voir s'il y a un objet fichier correspondant au champ. Si c'est le cas, l'utilisateur a téléchargé un nouveau fichier pour ce champ et le FileField aura été mis à jour.

+0

Merci; J'ai utilisé request = zope.app.component.hooks.getSite(). REQUEST au lieu du contexte, puis vérifié request.has_key ('FileField_file') qui semble ne apparaître que si FilField a été mis à jour. – askvictor

0

Voici ce que j'attaché à la IObjectEditedEvent:

En utilisant le formulaire par défaut créé à partir de sous-classement ATBlob, mise en œuvre (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" 

Je voudrais savoir ce que les autres les valeurs form['file_delete'] peuvent avoir. Cela semble utile.