2017-06-17 14 views
3

私は、エラーはおそらく円形のインポートエラーが原因であると知っていますが、それについて多くの知識を持っていないため、修正できません。私は同様の質問に与えられた方法を使用してみましたがit.Theプロジェクトは2つのアプリを相談し、メインと私はお互いに自分のモデルをインポートする必要があり解決できませんでした、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' 

私はよろしくお願いします、ジャンゴで初心者だということを考慮すると答えてください:)

+0

をしてください書き込みエラーのトレースバックを追加するのと同じ方法を使用します。 – WPedrak

+0

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

答えて

2

使用to='<app_lable>.<Model Name>'私はコードの下で行ったように、ファイルから

削除インポートモデルがモデルでForeignKeyのと多対多のフィールドを追加します。 to='consult.Question' 我々は移行ファイルに打ちモデル名を使用しmakemifrationコマンドからの移行を作成し、だから、FOREIGNKEYおよび多対多のフィールド

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で メイン/ models.pyで

import main.models.Customer 

import consult.models.Question 
import consult.models.Reply 
その後

代わりのCustomerあなたはimport consult.models.Questionを使用するとを使用して、代わりにQuestionのかReply FOREIGNKEYと多対多分野における

+0

私はあなたの提案を使用してみました@omu_negruしかし、次のエラーがあります: - [http://dpaste.com/1MZ9N6R]( http://dpaste.com/1MZ9N6R) –

+0

私は "main import models from mm"でも試してみましたが、 "AttributeError:module 'consult.models'に属性 'Question'がありません" –

+0

' 'その後、完全修飾インポートパスを使用し、それが動作するかどうかを教えてください –

関連する問題