Import error on django models.py

django, python

Solution

You are doing what is known as a Circular import.

models.py:

from bm.bmApp.utils import to_safe_uppercase

utils.py:

from bm.bmApp.models import Client

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

- `models.py - Line 1`: try to import `bm.bmApp.utils`

- `utils.py - Line 1`: try to import `bm.bmApp.models`

- `models.py - Line 1`: try to import `bm.bmApp.utils`

- `utils.py - Line 1`: try to import `bm.bmApp.models`

- ...

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

utils.py:

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

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

Problem

I wrote this funcion on a utils.py located on the app direcroty: ``` from bm.bmApp.models import Client def get_client(user): try: client = Client.objects.get(username=user.username) except Client.DoesNotExist: print "User Does not Exist" return None else: return client def to_safe_uppercase(string): if string is None: return '' return string.upper() ``` Then when i use the function to_safe_uppercase on my models.py file, by importing it in this way: ``` from bm.bmApp.utils import to_safe_uppercase ``` I got the python error: ``` from bm.bmApp.utils import to_safe_uppercase ImportError: cannot import name to_safe_uppercase ``` I got the solution for this problem when i change the import statement for: ``` from bm.bmApp.utils import * ``` But i can't understand why is this, why when i import the specific function i got the error?

Original source