Search code examples
pythondjangodjango-managers

In a Django manager, why use self.get_query_set().get(kwarg=val) rather than self.get(kwarg=val)?


In a prior question I asked, where a Manager's method looked like:

def activate(key):
    try:
        profile = self.get(key=key)
    except self.model.DoesNotExist:
        return None

    if not profile.key_expired():
        # -> Activate user
        return user

    return None

It was suggested to use self.get_query_set().get(key=key) instead of self.get(key=key) within the manager method. I was wondering what the reason for this is, as the former seems much more verbose?


Solution

  • I guess the author just likes being verbose. There is no difference. The Manager class' get method is defined as:

    def get(self, *args, **kwargs):
        return self.get_query_set().get(*args, **kwargs)
    

    You can see it for yourself in django/db/models/manager.py