【问题标题】:Running Standalone scripts Django运行独立脚本 Django
【发布时间】:2014-08-12 21:48:35
【问题描述】:

我正在尝试学习“如何在 django 中运行独立脚本”。 我正在使用 python2.7 和 django==1.4.3。 我创建了一个非常基本的脚本,我正在尝试运行但面临 导入错误。我不想创建管理命令,因为这只是 临时的东西,我的重点也是学习。

我的代码

import os
import sys
from cartridge.shop.models import HomepageUpselling


class HomepageUpsellingToBestsellers():
    """This class copy the HomepageUpselling data to BestSellers"""

    def homepageuselling_to_bestsellers(self):
        """ Data Copy """
        hu_obj = HomepageUpselling.objects.all()
        for hu_iterable in hu_obj:
            bs_obj, created = \
                BestSeller.objects.get_or_create(product=hu_iterable.product,
                                                 variation=hu_iterable.variation)
            print "BestSeller data copying %s" % bs_obj.id
        return


if __name__ == "__main__":
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "project_name.setttings")
    sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
    from django.core.management import execute_from_command_line
    hu_to_bs_obj = HomepageUpsellingToBestsellers()
    hu_to_bs_obj.homepageuselling_to_bestsellers()
    print "Data Copied"

错误

ImportError: No module named cartridge.shop.models

【问题讨论】:

  • 是在项目文件夹还是环境中?
  • 我在父文件夹旁边创建了一个名为 scripts 的目录,其中包含 init 文件。所以父文件夹是 /Users/nikhilverma/workspace/BHANE/bhane.com 和脚本目录是 /Users/nikhilverma/workspace/BHANE/bhane.com/bhane/scripts
  • 我认为你需要先设置 django 环境

标签: django


【解决方案1】:

您使用的是 Django 1.4 所以这里是编码环境的正确方法..

import os
import sys
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "your_project_name.settings")

# you can import your model here and the locaion of function 
from your_project_name.models import Location

# From here you can start your script..

【讨论】:

  • 还是一样:- 回溯(最近一次通话最后一次):文件“bhane/scripts/copy_homepageupselling_data_to_bestsellers.py”,第 12 行,在 中来自盒装.shop.models import HomepageUpsales ImportError: No名为 Cartridge.shop.models 的模块
  • @djangobot stackoverflow.com/a/66446394/11590791 参考此代码。它工作正常。
【解决方案2】:

在我看来(尤其是考虑到您的用例)最好的方法是编写自己的管理命令。子类Basecommand 然后运行为

 python manage.py yourcommand arguments

Django documentation for custom commands

【讨论】:

    猜你喜欢
    • 2023-03-17
    • 1970-01-01
    • 2016-08-21
    • 1970-01-01
    • 2022-06-14
    • 1970-01-01
    • 2019-01-19
    相关资源
    最近更新 更多