2016-07-07 82 views
0

我是django中的新成员。 我有两个应用程序名为评论和newapp.I我试图从评论应用程序导入一个类(评论级)到newapp。但是,我得到一个错误称为ImportError:无法导入名称'Comment'django 1.9

ImportError: cannot import name 'Comment'

这是我从评论的应用程序

from __future__ import unicode_literals 
from django.db import models 
from django.conf import settings 
from django.contrib.contenttypes.fields import GenericForeignKey 
from django.contrib.contenttypes.models import ContentType 
# Create your models here. 

from newapp.models import NewApp 
from newapp.models import Test 

class CommentManager(models.Manager): 
    def filter_by_instance(self, instance): 
     content_type = ContentType.objects.get_for_model(instance.__class__) 
     obj_id = instance.id 
     qs = super(CommentManager, self).filter(content_type=content_type, object_id=obj_id) 
     return qs 



class Comment(models.Model): 
    user = models.ForeignKey(settings.AUTH_USER_MODEL, default=1) 
    #post = models.ForeignKey(NewApp) 

    content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE) 
    object_id = models.PositiveIntegerField() 
    content_object = GenericForeignKey('content_type', 'object_id') 
    content = models.TextField() 
    timestamp = models.DateTimeField(auto_now_add=True) 
    objects = CommentManager() 

    def __unicode__(self): 
     return str(self.user.username) 
    def __str__(self): 
     return str(self.user.username) 

这里model.py'是NEWAPP应用

from __future__ import unicode_literals 
from django.db import models 
from django.conf import settings 
from django.contrib.contenttypes.fields import GenericForeignKey 
from django.contrib.contenttypes.models import ContentType 
from django.core.urlresolvers import reverse 

from django.db.models.signals import pre_save 
from django.utils import timezone 
from django.utils.safestring import mark_safe 
from django.utils.text import slugify 

#here is the problem code to import below class 
from comments.models import Comment 


# Create your models here. 
class NewApp(models.Model): 
    user = models.ForeignKey(settings.AUTH_USER_MODEL, default=1) 
    title = models.CharField(max_length=120) 
    slug = models.SlugField(unique=True) 
    image = models.FileField(null=True, blank=True) 
    content = models.TextField() 
    updated = models.DateTimeField(auto_now=True, auto_now_add=False) 
    timestamp = models.DateTimeField(auto_now=False, auto_now_add=True) 

    def _unicode_(self): 
     return self.title 
    def _str_(self): 
     return self.title 
    def get_absolute_url(self): 
     return reverse("posts:detail", kwargs={"slug":self.slug}) 
    @property 
    def comments(self): 
     instance = self 
     qs = Comment.objects.filter_by_instance(instance) 
     return qs  
    # @property 
    # def comments(self): 
    # instance = self 
    # qs = Comment.objects.filter_by_instance(instance) 
    #  return qs 
class Test(models.Model): 
    def _unicode_(self): 
     return self.title 


def create_slug(instance, new_slug=None): 
    slug = slugify(instance.title) 
    if new_slug is not None: 
     slug = new_slug 
    qs = NewApp.objects.filter(slug=slug).order_by("-id") 
    exists = qs.exists() 
    if exists: 
     new_slug = "%s-%s" %(slug, qs.first().id) 
     return create_slug(instance, new_slug=new_slug) 
    return slug 


def pre_save_post_receiver(sender, instance, *args, **kwargs): 
    if not instance.slug: 
     instance.slug = create_slug(instance) 



pre_save.connect(pre_save_post_receiver, sender=NewApp) 

的 'model.py' 代码来自setting.py的安装APP

INSTALLED_APPS = [ 
    'django.contrib.admin', 
    'django.contrib.auth', 
    'django.contrib.contenttypes', 
    'django.contrib.sessions', 
    'django.contrib.messages', 
    'django.contrib.staticfiles', 
    'posts', 
    'comments', 
    'newapp', 
] 

finnaly我得到这样的错误

Unhandled exception in thread started by <function check_errors.<locals>.wrapper 
at 0x039B27C8> 
Traceback (most recent call last): 
    File "C:\Users\eXp\AppData\Local\Programs\Python\Python35-32\lib\site-packages 
\django\utils\autoreload.py", line 226, in wrapper 
    fn(*args, **kwargs) 
    File "C:\Users\eXp\AppData\Local\Programs\Python\Python35-32\lib\site-packages 
\django\core\management\commands\runserver.py", line 109, in inner_run 
    autoreload.raise_last_exception() 
    File "C:\Users\eXp\AppData\Local\Programs\Python\Python35-32\lib\site-packages 
\django\utils\autoreload.py", line 249, in raise_last_exception 
    six.reraise(*_exception) 
    File "C:\Users\eXp\AppData\Local\Programs\Python\Python35-32\lib\site-packages 
\django\utils\six.py", line 685, in reraise 
    raise value.with_traceback(tb) 
    File "C:\Users\eXp\AppData\Local\Programs\Python\Python35-32\lib\site-packages 
\django\utils\autoreload.py", line 226, in wrapper 
    fn(*args, **kwargs) 
    File "C:\Users\eXp\AppData\Local\Programs\Python\Python35-32\lib\site-packages 
\django\__init__.py", line 18, in setup 
    apps.populate(settings.INSTALLED_APPS) 
    File "C:\Users\eXp\AppData\Local\Programs\Python\Python35-32\lib\site-packages 
\django\apps\registry.py", line 108, in populate 
    app_config.import_models(all_models) 
    File "C:\Users\eXp\AppData\Local\Programs\Python\Python35-32\lib\site-packages 
\django\apps\config.py", line 202, in import_models 
    self.models_module = import_module(models_module_name) 
    File "C:\Users\eXp\AppData\Local\Programs\Python\Python35-32\lib\importlib\__i 
nit__.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 662, in exec_module 
    File "<frozen importlib._bootstrap>", line 222, in _call_with_frames_removed 
    File "C:\Users\eXp\Desktop\venv\mysite\comments\models.py", line 8, in <module 
> 
    from newapp.models import NewApp 
    File "C:\Users\eXp\Desktop\venv\mysite\newapp\models.py", line 13, in <module> 

    import django.comments 
ImportError: No module named 'django.comments' 
Unhandled exception in thread started by <function check_errors.<locals>.wrapper 
at 0x034627C8> 
Traceback (most recent call last): 
    File "C:\Users\eXp\AppData\Local\Programs\Python\Python35-32\lib\site-packages 
\django\utils\autoreload.py", line 226, in wrapper 
    fn(*args, **kwargs) 
    File "C:\Users\eXp\AppData\Local\Programs\Python\Python35-32\lib\site-packages 
\django\core\management\commands\runserver.py", line 109, in inner_run 
    autoreload.raise_last_exception() 
    File "C:\Users\eXp\AppData\Local\Programs\Python\Python35-32\lib\site-packages 
\django\utils\autoreload.py", line 249, in raise_last_exception 
    six.reraise(*_exception) 
    File "C:\Users\eXp\AppData\Local\Programs\Python\Python35-32\lib\site-packages 
\django\utils\six.py", line 685, in reraise 
    raise value.with_traceback(tb) 
    File "C:\Users\eXp\AppData\Local\Programs\Python\Python35-32\lib\site-packages 
\django\utils\autoreload.py", line 226, in wrapper 
    fn(*args, **kwargs) 
    File "C:\Users\eXp\AppData\Local\Programs\Python\Python35-32\lib\site-packages 
\django\__init__.py", line 18, in setup 
    apps.populate(settings.INSTALLED_APPS) 
    File "C:\Users\eXp\AppData\Local\Programs\Python\Python35-32\lib\site-packages 
\django\apps\registry.py", line 108, in populate 
    app_config.import_models(all_models) 
    File "C:\Users\eXp\AppData\Local\Programs\Python\Python35-32\lib\site-packages 
\django\apps\config.py", line 202, in import_models 
    self.models_module = import_module(models_module_name) 
    File "C:\Users\eXp\AppData\Local\Programs\Python\Python35-32\lib\importlib\__i 
nit__.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 662, in exec_module 
    File "<frozen importlib._bootstrap>", line 222, in _call_with_frames_removed 
    File "C:\Users\eXp\Desktop\venv\mysite\comments\models.py", line 8, in <module 
> 
    from newapp.models import NewApp 
    File "C:\Users\eXp\Desktop\venv\mysite\newapp\models.py", line 14, in <module> 

    from comments.models import Comment 
ImportError: cannot import name 'Comment' 
+0

看起来您正在浏览CFE上的“推进博客”教程。你有没有试过看教程的源代码? https://github.com/codingforentrepreneurs/Advancing-the-Blog –

+0

是其在CFE youtube频道上的“推进博客”教程。感谢您的链接 –

回答

0

您正在从newapp的评论和评论导入newapp。在python中,你不能像这样进行循环导入。快速修复:从评论的models.py中的newapp中删除导入,并用名称引用替换,如下所示:

class Comment(models.Model): 
    user = models.ForeignKey(settings.AUTH_USER_MODEL, default=1) 
    post = models.ForeignKey('newapp.NewApp') # <= HERE 

    content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE) 
    object_id = models.PositiveIntegerField() 
    content_object = GenericForeignKey('content_type', 'object_id') 
    content = models.TextField() 
    timestamp = models.DateTimeField(auto_now_add=True) 
    objects = CommentManager() 
+0

谢谢先生@ herberth-amaral –

相关问题