创建 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>
答案 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"/>