如何在odoo中运行cron作业

时间:2018-03-23 05:01:56

标签: cron odoo

创建 cron作业,每1分钟获取一次天气信息,但不起作用。在这里,我附上代码(.py函数)。

    @api.model
    def weather_cron(self):
        weather_location_ids =self.env['weather_location.weather_location'].search([])
        for weather_location_id in weather_location_ids:
            url_cron = weather_location_id.api_address + weather_location_id.name
            json_data = requests.get(url_cron).json()
            formatted_data = json_data['weather'][0]['main']
            formatted_data1 = json_data['main']['temp']
            formatted_data2 = json_data['main']['temp_min']
            formatted_data3 = json_data['main']['temp_max']
            formatted_data4 = json_data['main']['humidity']
            self.env['current_weather.current_weather'].create({
                     'weather_id':weather_location_id.id,
                     'main':formatted_data,
                     'temp':formatted_data1,
                     'temp_min':formatted_data2,
                     'temp_max':formatted_data3,
                     'humidity':formatted_data4,
                })

Cron Job(.xml文件):

<?xml version="1.0" encoding="UTF-8"?>
<odoo>
    <data noupdate="1">
        <record forcecreate="True" id="create_weather_info_cron" model="ir.cron">
            <field name="name">Weather Information</field>
            <field name="user_id" ref="base.user_root"/>
            <field name="active" eval="False" />
            <field name="interval_number">1</field>
            <field name="interval_type">minutes</field>
            <field name="numbercall">-1</field>
            <field name="doall" eval="False"/>
            <field name="model" eval="'weather_location.weather_location'"/>
            <field name="function" eval="'weather_cron'"/>
        </record>
    </data>
</odoo>

2 个答案:

答案 0 :(得分:1)

你的所有领域都是正确的,加上这两个:

    <field name="args" eval="'()'"/>
    <!-- delay the call 2 minutes just to make sure but it's optional -->
    <field name="nextcall" eval="(DateTime.now() + timedelta(minutes=2)).strftime('%Y-%m-%d 00:00:00')" />

现在,如果代码不起作用,您需要确保它。

#1- check that your file is in the  __openerp__.py  or __manifest__.py 
#2- if you don't know how to use debug mode in your IDE just use logging to see if Odoo calls your methodname

希望这有助于你

如果您在xml文件中使用noupdate="1",则有一件事情不会更新它在第一次插入的记录,无论您在代码中更改什么,这都不会影响数据库中的recrod。 只需更改ID并从设置菜单

手动删除ir.cron记录

编辑:

每个model with "model.name"都有xml_id这样model_model_name 当您看到mode_id时,请记住在名称前添加_model

  <field name="model_id" ref="weather_location.model_weather_location"/>

他们和ref="model_weather_location"

放在同一个模块中

但是对于ir.cron,只需提供模型的名称,因为它是Char字段而不是many2one

   <field name="model" eval="'weathe.location'"/>

答案 1 :(得分:0)

您使cron作业无效。由于它不活动,因此不会触发您编写的功能。请将值更改为活动 True

<field name="active" eval="True"/>