I know the error is probably due to circular import error but not having much knowledge about it I am not able to correct it. I have tried using the methods given in similar questions but couldn't resolve it.The project has two apps consult and main and I need to import their models into each other,
consult/models.py
from django.db import models
from django.contrib.auth.models import User
from main.models import Customer
class Question(models.Model):
name = models.ForeignKey(Customer, on_delete=models.CASCADE)
type = models.CharField(max_length=100, default="SkinCare")
title = models.CharField(max_length=1000)
body = models.CharField(max_length=1000000)
image = models.FileField(blank=True, default=None)
time = models.DateTimeField()
deltatime = models.IntegerField(default=0)
def __str__(self):
return str(self.time)
class Reply(models.Model):
name = models.ForeignKey(Question, on_delete=models.CASCADE)
user = models.ForeignKey(Customer, on_delete=models.CASCADE)
text = models.CharField(max_length=10000000000)
like = models.IntegerField(default=0)
dislike = models.IntegerField(default=0)
time = models.DateTimeField()
deltatime = models.IntegerField(default=0)
def __str__(self):
return str(self.time)
main/models.py
from django.contrib.auth.models import User
from django.db import models
from consult.models import Question, Reply
class Customer(models.Model):
name = models.ForeignKey(User, null=True)
gender = models.CharField(max_length=100)
skin_type = models.CharField(max_length=1000)
hair_type = models.CharField(max_length=1000)
bookmarked = models.ManyToManyField(Question)
def __str__(self):
return str(self.name)
When I run try to migrate the appps the following error comes:
Traceback (most recent call last):
File "manage.py", line 22, in <module>
execute_from_command_line(sys.argv)
File "C:\Users\Nikhil Khandelwal\AppData\Local\Programs\Python\Python35-
32\lib\site-packages\django-1.10.4-
py3.5.egg\django\core\management\__init__.py", line 367, in execute_from_
command_line
utility.execute()
File "C:\Users\Nikhil Khandelwal\AppData\Local\Programs\Python\Python35-
32\lib\site-packages\django-1.10.4-
py3.5.egg\django\core\management\__init__.py", line 341, in execute
django.setup()
File "C:\Users\Nikhil Khandelwal\AppData\Local\Programs\Python\Python35-
32\lib\site-packages\django-1.10.4-py3.5.egg\django\__init__.py", line 27,
in setup
apps.populate(settings.INSTALLED_APPS)
File "C:\Users\Nikhil Khandelwal\AppData\Local\Programs\Python\Python35-
32\lib\site-packages\django-1.10.4-py3.5.egg\django\apps\registry.py", line
108, in populate
app_config.import_models(all_models)
File "C:\Users\Nikhil Khandelwal\AppData\Local\Programs\Python\Python35-
32\lib\site-packages\django-1.10.4-py3.5.egg\django\apps\config.py", line
199, in import_models
self.models_module = import_module(models_module_name)
File "C:\Users\Nikhil Khandelwal\AppData\Local\Programs\Python\Python35-
32\lib\importlib\__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 986, in _gcd_import
File "<frozen importlib._bootstrap>", line 969, in _find_and_load
File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 673, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 665, in exec_module
File "<frozen importlib._bootstrap>", line 222, in
_call_with_frames_removed
File "C:\New folder\WebD\zerovey\consult\models.py", line 3, in <module>
from main.models import Customer
File "C:\New folder\WebD\zerovey\main\models.py", line 3, in <module>
from consult.models import Question, Reply
ImportError: cannot import name 'Question'
Please answer considering that I am a beginner in Django, Thanking you in Advance :)
Changing the name of the Working file different from the module which is imported in the script can avoid the Circular Imports problem. Import the module: Avoid importing objects or functions from a module that can cause Circular Imports. It is good to import the whole module to avoid the Circular Import.
Let's import the functions particularly instead of the whole file. To avoid circular import errors, you can move ```from module import X``` to a place it is needed.
db' pylint(import-error) showing up. This is because VS Code is not running the Virtual Environment of the app. To fix it, run cmd-shift-p (or click View -> Command Palette and run the command Python: Select Interpreter. VS Code will show you a list of Python interpreters found.
Use to='<app_lable>.<Model Name>'
in Foreignkey and ManytoMany Fields
Remove import models from file add foreignkey and manytomany fields in model like i did in below code.to='consult.Question'
When we create migrations from makemifration command that use hardcode model name in migration file, So use same way to write Foreignkey and Manytomany field
from django.contrib.auth.models import User
from django.db import models
class Customer(models.Model):
name = models.ForeignKey(User, null=True)
gender = models.CharField(max_length=100)
skin_type = models.CharField(max_length=1000)
hair_type = models.CharField(max_length=1000)
bookmarked = models.ManyToManyField(to='consult.Question')
def __str__(self):
return str(self.name)
Another way to resolve circular imports is to do:
from django.apps import apps
MyModel = apps.get_model('myapp', 'MyModel')
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With