Django models.py中Airport类触发NameError问题求助
解决Django Shell中
NameError: name 'Airport' is not defined的问题 问题根源
你在Django Shell里直接调用Airport类,但没有先从对应的app中导入这个模型,Python自然找不到它。
解决方法
1. 先确认app已注册
打开项目根目录的settings.py,找到INSTALLED_APPS列表,把你的app名称(比如models.py所在的app叫flights)加进去:
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'flights', # 替换成你实际的app名称 ]
2. 在Shell中正确导入模型
用python manage.py shell进入Django Shell后,执行导入命令:
# 替换flights为你的app名称 from flights.models import Airport, Flight
之后就能正常创建数据了,比如:
# 创建机场实例并保存 cdg = Airport(code="CDG", city="Paris") cdg.save()
3. 备选导入方式(无需硬编码app名)
如果不想写死app名称,也可以用Django的apps模块动态导入:
from django.apps import apps Airport = apps.get_model('flights', 'Airport') # 第一个参数是app名,第二个是模型名
额外提醒
- 修改models.py后,必须运行
python manage.py makemigrations和python manage.py migrate同步数据库,不然可能出现其他异常。 - 一定要用
python manage.py shell进入Shell,普通Python Shell不会加载Django环境,肯定找不到模型。
内容的提问来源于stack exchange,提问作者Ritam Kayal
相关产品推荐
相关产品推荐

