Instead, OpinionReading can have opinion_author and opinion_type attributes corresponding to the author and type found on the Opinion model. That way the Decision and OpinionReading don't both need to have the Opinion as attributes.
Decision.posit could take author and type parameters to pass the Holdings that need to be posited down to the proper OpinionReading (but if there's only one OpinionReading, those params could be omitted).