从外部调用模型的方法Django

问题描述:

我有一些静态方法的Django模型。我想从应用程序外部调用方法(cronjob)。从外部调用模型的方法Django

的模式,我有:

class Job(models.Job): 
    #Irrelevant information 

    @staticmethod 
    def methodIwantToCall(): 
     #statements 

我有我使用cron作业以下Python文件:

#!/usr/bin/python 
# -*- coding: UTF-8 -*- 

import os 
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings' 

from myapp.models import Job 

Job.methodIwantToCall() 

起初,我是有关于DJANGO_SETTINGS_MODULE not being set错误,我修正了这个问题,但是现在我有以下错误:No module named myapp.utils

我觉得我正在做一些我不应该做的事情。那么,我如何以我想要的方式调用静态方法呢?

编辑:它看起来像路径越来越乱了,当我从外部Django导入。例如,我在我的模型文件中有一个导入,当我调用cron文件时,即使它正在工作,它也会通过消息ImportError: No module named myapp.utils导入失败。

正确的解决方案是创建custom manage.py command

+0

谢谢你的建议,我会研究它是否有足够的知识去做:P。 – Ali 2012-01-17 09:41:25

+0

我结束了使用[django-extensions](https://github.com/django-extensions/django-extensions)。 – Ali 2012-01-17 15:29:16

假设你的cron作业代码驻留在相同的目录中设置文件,使用下面的设置代码开头:

from django.core.management import setup_environ 
import settings 

setup_environ(settings) 
+0

cron作业代码驻留在同一目录中。我仍然有关于不能导入Utils的错误。 蟒蛇cron_fetch.py​​ 回溯(最近通话最后一个): 文件 “cron_fetch.py​​”,13号线,在 从myapp.models导入工作 文件 “C:\ APPS \ MYAPP \ models.py”第4行,在 from myapp.utils import beautifyDict ImportError:没有名为myapp.utils的模块 – Ali 2012-01-17 09:31:27

+0

对于糟糕的格式化注释感到抱歉。 – Ali 2012-01-17 09:32:14

+0

好的,也许你可以通过在'models'文件中使用'from utils import beautifyDict'等相对导入来解决这个问题。但是,如@DrTyrsa所提到的那样创建自定义的manage.py命令可能是更好的解决方案。 – 2012-01-17 09:38:02