I ran into similar problems. The standard way for Django is to disable the cache for authenticated users.
CACHE_MIDDLEWARE_ANONYMOUS_ONLY=True
It works great if different users see different pages (for example, their username on them), and you cannot have one version for them.
But if there are only 2 versions of the page: for authenticated users and for others, then it is not good to completely disable the cache for authenticated users. I wrote an application that, among other things, allows you to fine-tune the cache in this case.
Update
: , "", . , ( Expires E-tag), .
( , URL-), @cache_control(must_revalidate=True) decorator.