Django 1.11如何仅执行一次使用Django模型将数据保存到DB的代码

时间:2019-01-25 06:19:14

标签: python django django-models django-rest-framework

我开始使用Django Rest Framework,我的应用基于Django 1.11版本。

我有一个型号名称Test。 现在,我只需要在应用启动时填充一次该模型,即可从REST API调用中接收数据。我读到有关app.ready()的文章,但我不知道如何整理这些步骤。

所以基本上当应用启动时:

  1. 最好通过调用object.count()来检查表A中是否存在某些数据。

  2. 如果是,什么也不做。

  3. 如果没有,请调用第三方API并保存模型。

这也可以在Admin上完成吗?

1 个答案:

答案 0 :(得分:2)

有几种方法可以做到这一点。最干净的方法是像这样create a new custom command

# app/management/commands/updateappdb.py

from django.core.management.base import BaseCommand, CommandError   
from polls.models import Question as Poll

class Command(BaseCommand):
    help = 'Update DB'


    def handle(self, *args, **options):
        # Update code here
        if not YourModel.objects.exists():
           # do something
        self.stdout.write(self.style.SUCCESS('Successfully Updated')

然后您可以使用以下命令作为示例:

  

python manage.py updateappdb && python manager.py runserver

还有另一种方法,将它们写在urls.py中。每当服务器启动时,Urls.py就会加载一次。因此,在urls.py中,您可以这样尝试:

from django.confs.urls.defaults import *
from your_file import data_import_function  # which has the data load functionality

urlpatterns = [...]

data_import_function()

但是在这两种方法中,我更喜欢第一种。因为它将更加可重用,并且如果您希望定期更新,则可以将此自定义命令与cronjob集成。