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

问题描述 投票:-2回答:2

我是Django的新手,并且正在尝试开发基于它的博客。

python manage.py makemigrationspython manage.py migrate的命令运行良好之后,我进入InteractiveConsole执行Post.objects.all()并得到一个NameError。

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

此外,在运行localhost:8000时,Server提供了另一个NameError。

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

以下是我的views.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})

如果是,models.py中有Post代码。

class Post(models.Model):title = models.CharField(max_length = 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

非常感谢你!

python django nameerror
2个回答
0
投票

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

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

from app.models import Post

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

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


0
投票

您可以在视图中导入模型。

在你的情况下应该是这样的:

from appName.models import Post

希望这可以帮助!

© www.soinside.com 2019 - 2024. All rights reserved.