2017-06-17 78 views
3

我知道错误可能是由于循环导入错误,但没有太多的知识,我无法纠正它。我已经使用了类似的问题给出的方法试过,但未能解决后援项目有两个应用咨询及主,我需要他们的模型导入到对方,如何解决django中的循环导入错误?

咨询/ 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) 

主/ 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) 

当我运行尝试迁移appps以下错误出现:

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' 

请回答考虑到我在Django初学者,请多关照:)

+0

请添加错误的回溯。 – WPedrak

+0

[http://dpaste.com/2FBKXMC](http://dpaste.com/2FBKXMC) –

回答

2

使用to='<app_lable>.<Model Name>'在FOREIGNKEY和多对多字段

卸下进口车型从文件添加外键和多对多领域模型像我下面的代码做英寸to='consult.Question' 当我们创建,在迁移文件中使用硬编码的型号名称makemifration命令迁移,所以用同样的方式来写外键和多对多场

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) 
+0

谢谢,它的工作就像我想要的一样至。 –

2

试着改变你的进口这样的:在咨询/ models.py

import main.models.Customer 
在主/ models.py

import consult.models.Question 
import consult.models.Reply 

然后,而不是Customer您使用main.models.Customer取而代之的QuestionReply您使用import consult.models.Questionconsult.models.Reply

+0

我试着用你的建议@omu_negru,但得到了以下错误: - [http://dpaste.com/1MZ9N6R]( http://dpaste.com/1MZ9N6R) –

+0

我也尝试从“主要导入模型为毫米”,但它给了错误“AttributeError:模块'consult.models'没有属性'问题'” –

+0

尝试删除'因为毫米'然后使用完全合格的导入路径,并告诉我它是否工作 –