Aggregate/annotate based on 2 different models

<opinion> That seems to me to be a potentially dangerous generalization with a lot of context missing around that discussion. </opinion>
I’m curious, what sources have led you to this opinion?
Also, see the various discussions here about this same topic.

See

as a starting point. In particular, note Andrew’s opening paragraph:

The main purpose of apps is, in my eyes, to provide logical separation of reusable components - specifically, a first-class namespace for models/admin/etc. - and to provide an easy way to turn things “on” or “off”.

Regarding your core question here, I’m not understanding how you’ve got these pieces assembled. You’ve shown a couple of different snippets, but being out of context of the files/classes in which they’re defined and used.

Note that at Aggregate/annotate based on 2 different models - #8 by KenWhitesell, I’ve already expressed the opinion that this type of work belongs in a custom manager and not in a model method.

Also, to avoid an N+1 query situation, you want this work to be done within the view and passed to the template through the context and not rely upon the template executing these queries. I believe you’re going to be much better off if you calculate these values as annotations in your query and not as model properties.