在Django中在哪里构建数据库对象(不使用shell)



我已经在model.py文件中创建了数据库模型,但我希望能够用数据填充它们。我已经编写了从文本文件中读取数据并为我的模型创建对象的代码。但我不确定在哪里真正运行这些代码,我能找到的所有教程都只是通过shell创建对象,但由于我是从文本文件中读取的,而且代码很长,我不想使用shell。我的解决方案是在我的应用程序文件夹中创建一个名为buildDB的文件,并在那里运行代码,但这不起作用:

如果我尝试使用在文件顶部导入模型from .models import *我得到ImportError: attempted relative import with no known parent package当我运行它时。如果我尝试使用from applicatonName.models import*我得到

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. 

当我在谷歌上搜索第二条错误消息时,会出现这种情况,因为我没有使用manage.py shell,而第一条错误消息我甚至不知道。我必须使用shell来填充数据库吗?如果没有,我将把代码放在哪里?

a(看起来应该编写一个数据迁移:https://docs.djangoproject.com/en/3.0/topics/migrations/#data-迁移

b( 另一种选择是编写一个"自定义命令":https://docs.djangoproject.com/en/3.0/howto/custom-management-commands/

c( 最后,您可以编写一个外部脚本来初始化django,并从文件中创建所有模型对象:只需在与django项目相同的文件夹中(或在一开始运行django.setup()scripts文件夹中(编写一个python脚本。这个脚本可以导入和使用模型和ORM,并创建所有数据库对象。

您尝试(c(但没有成功,因为您错过了django.setup()部分。

如果这是一些最初应该在应用程序的每个实例中填充的数据(例如,测试、预生产和生产(,那么我会选择一个

如果您将不得不不时地加载类似的文件,并且每次文件都不同,可能是b(或c(。后面的两个选项非常相似,自定义命令可能更干净(尽管您需要阅读有关编写自定义命令的文档(

最新更新