django无法导入数据库中的表
原来的代码是:
from .models import Author
debug错误提示:
ImportError: attempted relative import with no known parent package
当我把位置改为绝对路径时(from author.models import Author)
显示我环境变量配置有问题:django.core.exceptions.ImproperlyConfigured: Requested setting INSTALLED_APPS, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.
修改环境变量后反而其他配置出问题,所以又改回来了。
重新建了一个项目,导入了所有文件,仍然是同样的错误。
已确认app在settings中注册:
请问是哪里有问题?
不知道你这个问题是否已经解决, 如果还没有解决的话:环境:python 3.6 django3.0
项目名:BookRecommend
app名:data
aaa.py 是data下新建的一个python文件
寒假期间我自学了django用的最新版本,然而在我新建的一个python文件中导入models时它报了这样一个错误
我通过上网搜索,发现只有django2.0的解决方法,没有找到django3.0的,
我试过没有效果的方法就不再说了。(有的可能是不够详细,所以没有解决)
我按照网上的方法加上了这些代码
import os
import django
os.environ.setdefault(“DJANGO_SETTINGS_MODULE”, “BookRecommend.settings”)
django.setup()
由于加的位置不对,再次报错(网上的解决办法没有详细说明)
于是无奈之下只好翻官方文档,最终发现问题所在
文档中强调:
第一个django导入 INSTALLED_APPS .
如果是应用程序配置类,Django将导入应用程序的根包,该根包由 name 属性。如果它是一个python包,Django会创建一个默认的应用程序配置。
在这个阶段,您的代码不应该导入任何模型!
换句话说,应用程序的根包和定义应用程序配置类的模块不应该导入任何模型,甚至是间接导入。
严格来说,Django允许在加载应用程序配置后导入模型。但是,为了避免不必要的限制 INSTALLED_APPS ,强烈建议在此阶段不要导入任何模型。
完成此阶段后,在应用程序配置(如 get_app_config() 变得有用。
于是我将代码换了位置:
问题得到了解决。
在此提醒:
BookRecommend是我的项目名,更改时需要改成自己的项目名
然后再说一下自己血的教训:
有人给我说可能是我的app名字,即data这个名字与关键字重了,让我改名字试试
虽然我没有在网上找到data重名的这个可能性,但我还是试了一下,直接使用重命名失败,但我发现项目中涉及到的名字已经改变,而且python、django自带的某些文件中也出现了,不知道有没有被更改,好在项目运行暂时没有出问题。
所以一定一定不要病急乱投医,轻易使用app重命名,因为可能自带的文件中涉及到了app的名字,后果很严重!!!
再者,我改过数据库的表的字符长度,也改了迁移文件,还改了模型类,朋友帮我解决问题时,说可能有影响,重新迁移一次,最终我删了数据库(原因是有些表删不了。。。),重新迁移了一次,重新导入了数据。。。。。。
虽然不知道会不会有影响,建议,不要更改迁移文件,数据库表的结构,还有模型类
本文涉及到的官方文档django3.0连接:
问题可能出在您的导入语句上。如果您的models.py文件位于应用程序的根目录下,您可以使用以下语句导入模型:
from .models import Author
注意,这是一个相对导入。如果您使用此导入语句并且在另一个模块中使用它,则必须从与models.py相同的目录中导入该模块。否则,您可能会遇到“attempted relative import with no known parent package”错误。
如果您的models.py文件位于应用程序的根目录之外,您可以使用以下语句导入模型:
from author.models import Author
注意,这是一个绝对导入。如果您使用此导入语句并且在另一个模块中使用它,则应用程序的根目录不需要与models.py文件位于同一目录中。
如果您仍然遇到“settings are not configured”错误,请确保您已正确设置了DJANGO_SETTINGS_MODULE环境变量。有关如何设置此变量的说明取决于您的操作系统和IDE。如果您无法解决该问题,请尝试在Django项目的顶部添加以下代码:
import os
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'your_project.settings')
请注意,您需要将'your_project.settings'替换为您的Django项目的实际设置模块路径。
希望这可以帮助您解决问题!