Actually, it’s not that bad if you’re doing the reverse access. (Finding the objects related to a base object from the base object.) The ContentType for your base class is almost certainly going to be cached, so there won’t be any IO required for that reference.
What you’re really going to lose is the automatic integrity of having those related items deleted if the base object instance is deleted. But yes, if the number of instances per class is a fixed number, then GFKs aren’t necessary and likely not the best fit.
There’s another post from a different discussion on this site showing how you can use the from_db
method in your model to track the original value of a field when the model is retrieved. See - `RecursionError` when deleting a model instance in Admin - #12 by KenWhitesell. (Might be worth reading the entire thread for context.) You could implement that method in your code and compare the original field to what is in the model at the time of the save
to determine whether or not you need to rerender the text.
(Side note - if the rendering of text is that slow, you might also want to consider spinning that process off as a celery task to not slow down the person submitting the original text, unless they need to see it “right then”.)