以编程方式使用 Django 的 loaddata

Posted

技术标签:

【中文标题】以编程方式使用 Django 的 loaddata【英文标题】:Programmatically using Django's loaddata 【发布时间】:2010-10-27 14:55:06 【问题描述】:

我想从 Django 视图中调用 manage.py loaddata 的等效项。我希望能够指定从何处加载数据以及将其加载到哪个应用程序中。

有什么想法吗?

【问题讨论】:

【参考方案1】:

每个django-admin.py (manage.py) 命令,如documentation 所示,您可以使用以下代码从您的代码中调用:

from django.core.management import call_command

call_command('loaddata', 'myapp')

其中第一个参数是命令名称,所有其他位置参数与命令行位置参数相同,所有关键字参数都是选项。

【讨论】:

您还可以为抑制控制台输出添加选项“verbosity=0”:call_command('loaddata', 'fixture_name.json', verbosity=0) 这里的文档:docs.djangoproject.com/en/1.8/ref/django-admin/… 请注意在数据迁移中直接使用loaddata 命令是不合适的,因为它在内部加载了最新的模型定义并使用它们反序列化夹具中的历史数据。那是不正确的行为。解决方案:***.com/a/39743581/2293304 还要注意你应该使用app_label关键字参数来指定加载fixture的位置,例如call_command('loaddata', 'initial_data.json', app_label='myapp')。否则,它将从所有已安装的应用程序中加载具有相同名称的固定装置

以上是关于以编程方式使用 Django 的 loaddata的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 celery 和 Django 以编程方式生成 celerybeat 条目

Django dumpdata 和 loaddata 不适用于多对多中间模型

django 在向后迁移/ loaddata 后从夹具加载数据使用的是模型模式而不是数据库模式

Django 夹具未加载 loaddata

使用 Django OAuth2 Toolkit 以编程方式生成访问令牌

Django 1.6 - 以编程方式创建组和权限