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

Where to build database objects in Django(without using 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. 

当我 google 第二条错误消息时,似乎是因为我没有使用 manage.py shell 而发生这种情况,而我什至不知道第一条错误消息。我必须使用 shell 来填充数据库吗?如果没有,我会将我的代码放在哪里?

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

b) 另一种选择是编写 "custom command": https://docs.djangoproject.com/en/3.0/howto/custom-management-commands/

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

您尝试 (c) 没有成功,因为您缺少 django.setup() 部分。

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

如果您需要不时加载相似的文件,而每次的文件都不一样,可能是 b) 或 c)。后两个选项非常相似,自定义命令可能更简洁(尽管您需要阅读有关编写自定义命令的文档)