代码之家  ›  专栏  ›  技术社区  ›  EmmaYXY

Django:InteractiveConsole中未定义名称“Post”

  •  -1
  • EmmaYXY  · 技术社区  · 7 年前

    我对Django很陌生,正试图在此基础上开发一个博客。

    python manage.py makemigrations python manage.py migrate 工作顺利,我进入InteractiveConsole执行 Post.objects.all() 出现了一个名称错误。

    >>> Post.objects.all()
    Traceback (most recent call last):
    File "<console>", line 1, in <module>
    NameError: name 'Post' is not defined
    

    此外,在运行localhost:8000时,服务器还提供了另一个名称错误。

    NameError at /
    name 'Post' is not defined
    Request Method: GET
    Request URL:    http://localhost:8000/
    Django Version: 2.0
    Exception Type: NameError
    Exception Value:    
    name 'Post' is not defined
    Exception Location: D:\experiment\blogproject\blog\views.py in index, line 6
    Python Executable:  d:\experiment\blogproject_env\Scripts\python.exe
    Python Version: 3.6.3
    Python Path:    
    ['D:\\experiment\\blogproject',
    'd:\\experiment\\blogproject_env\\Scripts\\python36.zip',
    'd:\\experiment\\blogproject_env\\DLLs',
    'd:\\experiment\\blogproject_env\\lib',
    'd:\\experiment\\blogproject_env\\Scripts',
    'd:\\professional soft\\python3.6.3\\Lib',
    'd:\\professional soft\\python3.6.3\\DLLs',
    'd:\\experiment\\blogproject_env',
    'd:\\experiment\\blogproject_env\\lib\\site-packages']
    Server time:    星期五, 22 十二月 2017 16:08:10 +0800
    

    以下是我的观点。py。

    from django.shortcuts import render
    from django.http import HttpResponse
    
    
    def index(request):
        post_list = Post.objects.all().order_by('-created_time')
        return render(request, 'blog/index.html', context={'post_list': post_list})
    

    在这种情况下,模型中有邮政编码。py。

    班级职务(型号、型号): 标题=型号。CharField(最大长度=70)

    body = models.TextField()
    
    created_time = models.DateTimeField()
    modified_time = models.DateTimeField()
    
    excerpt = models.CharField(max_length=200, blank=True)
    
    category = models.ForeignKey(Category, on_delete=models.CASCADE)
    tags = models.ManyToManyField(Tag, blank=True)
    
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    
    def __str__(self):
        return self.title
    

    非常感谢你!

    2 回复  |  直到 7 年前
        1
  •  0
  •   Nrzonline Tamer Tas    7 年前

    访问交互式Shell不会自动导入所有必需的文件。在开始使用这些非默认方法、函数、模型等之前,需要导入它。

    在您的情况下,必须在使用Post模型之前导入它。

    from app.models import Post

    其中app是模型所在的实际应用程序。

    这对您的视图也很重要,您必须在使用模型之前导入模型。

        2
  •  0
  •   N. Ivanov    7 年前

    您必须在视图中导入模型。

    在您的情况下,应该是这样的:

    from appName.models import Post
    

    希望这有帮助!