I am using Django Markitup to store markdown rendered versions of
TextFields in a database. I'd like to normalise all unicode data upon save
using unicodedata.normalize.
I've written a pre_save signal hook, which does this on all TextFields and
CharField and it works well.
@receiver(pre_save)def unicode_normalise(sender, **kwargs):
obj = kwargs['instance']
fields = obj._meta.fields
for f in fields:
# excluding django markitup rendered fields
if f.name.endswith('_rendered'):
continue
if isinstance(f, MarkupField):
_markupfield = getattr(obj, f.name)
_markupfield.raw = normalize('NFC', getattr(obj, _markupfield.raw))
# would need to re-render and save rendered version here
elif isinstance(f, (models.CharField, models.TextField)):
normalized = normalize('NFC', getattr(obj, f.name))
setattr(obj, f.name, normalized)
But Django Markitup make things complicated, as it has this two field (raw,
rendered) concept, which uses pre_save to render and save into it's hidden
rendered field: GitHub source
<https://github.com/carljm/django-markitup/blob/c8001bfd2d0e21c0f2eba4e571a405f7deb84dc5/markitup/fields.py#L94>
My problem is that a field's pre_save has priority over the signal
pre_save, so I cannot update the fields within the signal's pre_save function
(comment inserted in code block above).
How can I re-run a field's pre_save function within my pre_save hook and
make sure that the rendered markupfield is updated with the new version?
--
You received this message because you are subscribed to the Google Groups
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/django-users.
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-users/f7e781eb-9386-4177-a062-61cabc7a7cae%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.