2010-08-14 6 views
3

J'ai un modèle django avec un champ de texte. J'utilise un éditeur de texte riche (nicEdit) sur le site d'administration pour permettre au client d'entrer facilement du balisage sur le terrain. Je voudrais traiter le contenu du champ et effectuer quelques actions avant que quelque chose ne soit inséré dans la base de données. Par exemple, je veux supprimer les déchets générés par MS Word, les balises de police, etc. J'espère que cette partie sera facile, mais je ne suis pas sûr de savoir quoi contourner ou accrocher pour que cela fonctionne. Je souhaite également détecter les images liées à distance, télécharger une copie locale vers MEDIA_ROOT et relier imr src à l'image locale. Je ne suis pas sûr de savoir comment aller chercher l'image distante; Je pensais que django.Storage pourrait aider, mais il semble qu'il est incapable d'aller chercher du contenu à partir d'une URL distante.Django admin - champ de processus avant l'insertion/la mise à jour de la base de données

Des suggestions?

Répondre

3

Le dénudage de la camelote doit être effectué avec un champ de formulaire personnalisé. Téléchargement des images ... Il existe plusieurs façons de résoudre ce problème.

  • Si vous choisissez de stocker l'emplacement de l'image et l'emplacement d'origine dans la base de données, vous devez le faire avec un signal de pré-enregistrement.
  • Si vous choisissez de stocker les images localement directement, vous pouvez également les inclure dans le champ de formulaire. Téléchargez simplement toutes les images distantes et remplacez les URL par une URL locale.
+0

J'aurais dû mentionner que je n'avais encore rien à faire avec les formulaires, et encore moins créer des champs de formulaire personnalisés. Si vous pouviez poster un court exemple, je serais éternellement reconnaissant. Aussi, _how_ est-ce que je télécharge les images? –

+0

@no: dans ce cas, pourquoi ne pas essayer quelque chose comme ceci: http://code.google.com/p/django-richtext/ – Wolph

+0

Merci, je vais jeter un oeil à la source. Le projet django-photologue lié à partir de là semble bon aussi. Cela ne résout toujours pas le problème de téléchargement d'image, mais il semble que urllib puisse couvrir cela. –

9

Pour manipuler des données dans votre modèle avant de l'enregistrer, utiliser la méthode de sauvegarde() comme:

def save(self): 
     self.NameOfTextField = myCustomCleanFunction(self.NameOfTextField) 
     super(YourModelName, self).save() 

Rien ne sera sauvé que super (modelname, auto) .save() est exécutée.

Si vous souhaitez augmenter le type d'erreur au lieu de le traiter en mode silencieux, vous devrez probablement utiliser la méthode clean() avec raise ValidationError(). Télécharger le contenu à distance est un nouveau pour moi, donc je ne peux pas vous aider là-bas. Vous pourriez avoir à regarder au-delà de Django et trouver des fonctions Python pour faire le travail.

+0

Cela ressemble à ce que je cherche. Je vais essayer plus tard et faire un rapport. –

+0

Cela fonctionne, mais ce n'est pas réutilisable, à moins qu'il y ait quelque chose que je puisse remplacer 'YourModelName' avec une classe de base abstraite pour obtenir la bonne classe. –

+0

@no: Vous pouvez facilement le rendre réutilisable en ajoutant ce code dans une méthode séparée avec un 'signal' au lieu d'écraser le code' save'. – Wolph

Questions connexes