首页 > 解决方案 > 是否可以在 AppConfig 的 ready() 方法中使用固定装置填充模型?

问题描述

启动 Django 后,我正在尝试从固定装置填充模型。

我发现,可以在AppConfig's方法中调用自定义方法ready()

所以,当我尝试下一步时:

class ApplicationConfig(AppConfig):
    name = 'application'

    def ready(self):
        from django.core.management import call_command
        call_command('loaddata', 'application/fixtures/some_info.json')

我收到错误消息:

Traceback (most recent call last):
  File "manage.py", line 15, in <module>
    execute_from_command_line(sys.argv)
  File "/app/venv/lib/python3.6/site-packages/django/core/management/__init__.py", line 381, in execute_from_command_line
    utility.execute()
  File "/app/venv/lib/python3.6/site-packages/django/core/management/__init__.py", line 357, in execute
    django.setup()
  File "/app/venv/lib/python3.6/site-packages/django/__init__.py", line 24, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "/app/venv/lib/python3.6/site-packages/django/apps/registry.py", line 83, in populate
    raise RuntimeError("populate() isn't reentrant")
RuntimeError: populate() isn\'t reentrant

有没有其他方法可以在开始时预填充模型?或者,如何解决我的问题?

标签: djangomodelinitialization

解决方案


使用迁移文件。.

在该函数中,只需执行常规 Mymodel.objects.create(yadayadayada...)

确保首先创建一个 EMPTY 迁移文件,因为您需要先在 db 中创建表。


推荐阅读