Ali
Ali

Reputation: 3676

Calling a model's method from outside Django

I have a Django model with some static methods. I'd like to call the methods from outside the application (cronjob).

The model I have:

class Job(models.Job):
    #Irrelevant information

    @staticmethod
    def methodIwantToCall():
        #statements

I have the following python file that I'm using for the cron job:

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

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

from myapp.models import Job

Job.methodIwantToCall()

At first, I was having an error about DJANGO_SETTINGS_MODULE not being set and I fixed that, however, now I have the following error: No module named myapp.utils

I feel like I'm doing something that I'm not supposed to do. So how do I call that static method the way I want it to be called?

EDIT: It looks like the paths are getting messed up when I'm importing from outside Django. For example, I have an import in my models file, when I call the cron file it fails importing with the message ImportError: No module named myapp.utils even though it's working.

Upvotes: 0

Views: 1240

Answers (2)

DrTyrsa
DrTyrsa

Reputation: 31991

The proper solution is to create custom manage.py command.

Upvotes: 2

Jan Pöschko
Jan Pöschko

Reputation: 5580

Assuming your cron job code resides in the same directory as your settings file, use the following setup code at the beginning:

from django.core.management import setup_environ
import settings

setup_environ(settings)

Upvotes: 0

Related Questions