[Solved]-Import error on django models.py


You are doing what is known as a Circular import.


from bm.bmApp.utils import to_safe_uppercase


from bm.bmApp.models import Client

Now when you do import bm.bmApp.models The interpreter does the following:

  1. models.py - Line 1: try to import bm.bmApp.utils
  2. utils.py - Line 1: try to import bm.bmApp.models
  3. models.py - Line 1: try to import bm.bmApp.utils
  4. utils.py - Line 1: try to import bm.bmApp.models

The easiest solution is to move the import inside the function:


def get_client(user):
    from bm.bmApp.models import Client
        client = Client.objects.get(username=user.username)
    except Client.DoesNotExist:
        print "User Does not Exist"
        return None
        return client

def to_safe_uppercase(string):
    if string is None:
        return ''
    return string.upper()


You are creating a circular import.

from bm.bmApp.models import Client
# Rest of the file...

from bm.bmApp.utils import to_safe_uppercase
# Rest of the file...

I would suggest your refactor your code so that you don’t have a circular dependency (i.e. utils should not need to import models.py or vice versa).


I’m not sure I can explain the Import error, but I have three ideas. First, your function needs tweaking. You’ve used a reserved word ‘string’ as an argument. Consider renaming.

Second, what happens if you invoke ./manage.py shell, and do the import by hand. Does it give you any different?

Third, try deleting your pyc files to force django to recompile python code (this one is a very long shot…but worth eliminating)

Leave a comment