jcomeau_ictx
jcomeau_ictx

Reputation: 38412

Django session data obtainable from models.py without key

I want to access a session variable from a model, in order to customize what gets shown in a template using {{item.seller_email}}. relevant code from models.py:

SESSION_STORE = import_module(settings.SESSION_ENGINE).SessionStore
class Item(Action):
    def seller_email(self):
        seller = self.get_seller()
        session = SESSION_STORE()
        debug('session: %s' % vars(session))
        viewer = fetch(Client, email = session.get('client', None))
        administrator = viewer.is_admin() if viewer else False
        debug('viewer: %s, administrator: %s' % (viewer, administrator))
        if administrator:
            return seller.email
        else:
            return seller.anonymized[16:]       

the answer here seems to say that this is not possible nor desired, but I lack the understanding of Django's session mechanism to be sure: Access session / request information outside of views in Django

this seems to indicate that the current session can be retrieved outside of views, though, just by not passing a key: https://docs.djangoproject.com/en/1.6/topics/http/sessions/#using-sessions-out-of-views, but I've tried it both that way and the above way with the same results: an "empty" session is created.

I'm sure there are other, better ways of doing this, and I will find one myself, but can someone familiar with Django internals explain why this is not possible?

Upvotes: 0

Views: 617

Answers (1)

Andrew_Lvov
Andrew_Lvov

Reputation: 4668

Because the model shouldn't know anything about session, that creates unnecessary entanglement(?) beetween different components and violation of MVC pattern.

What I suggest to do, is to call the function, specifying parameters needed to get a proper result, viewer object in this case.

If using the code in the question, how do you expect your model to work if it's used in a management command (where there is no http request and as a result no session) ? Or from a celery job ?

Upvotes: 1

Related Questions