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.

Reply via email to