Étant donné un modèle Django likeso:Django compresser automatiquement les modèles de terrain sur save() et décomprimer lorsque le champ est accessible
from django.db import models
class MyModel(models.Model):
textfield = models.TextField()
Comment peut-on compresser automatiquement textfield
(par exemple avec zlib
) sur save()
et décompressez lorsque la propriété textfield
est accessible (c.-à-pas sur la charge), avec un flux de travail comme celui-ci:
m = MyModel()
textfield = "Hello, world, how are you?"
m.save() # compress textfield on save
m.textfield # no decompression
id = m.id()
m = MyModel.get(pk=id) # textfield still compressed
m.textfield # textfield decompressed
Je serais enclin à penser que vous surcharger MyModel.save
, mais je ne sais pas le pa ttern pour la modification sur place de l'élément lors de la sauvegarde. Je ne connais pas non plus la meilleure façon de décompresser Django quand le champ est accédé (surcharge __getattr__
?).
Ou une meilleure façon de faire ceci serait d'avoir un custom field type?
Je suis certain que j'ai vu un exemple de presque exactement cela, mais hélas, je n'ai pas été en mesure de le trouver récemment.
Merci d'avoir lu – et pour toute contribution que vous pourriez être en mesure de fournir.
Tout à fait d'accord. Ils sont faciles à créer et peuvent simplifier n'importe quel nombre de problèmes communs. Google sur "django strip charfield" pour plusieurs prend une simple extension de models.CharField(), à savoir dépouiller les espaces de début/fin. Franchement, je suis surpris qu'il ne l'ait jamais fait dans le coffre. –