【发布时间】:2020-06-17 14:56:44
【问题描述】:
我在 ODOO 框架的模型文件中有一个函数。我刚刚在我的函数中遇到了 SQL 查询。我只想使用 Odoo 框架将 SQL 查询转换为 ORM。 喜欢、创建、搜索、浏览它已经拥有的内置功能。对于下面函数中的两个查询,我只需要一些示例,例如我们如何将其转换为 ORM 并提供良好的解释。这样我也可以对其他查询进行相同的处理。
功能:
def bill(self,data):
id = data.get('id', False)
if data:
chge = []
s_Date = data['start_date']
e_Date = data['end_date']
query = """SELECT "endpoll","table_name","kcp","plan","startpoll",id FROM
bill WHERE ((("endpoll" >= '%s') OR "endpoll" IS NULL ) AND ("startpoll" <= '%s') AND
("customer" = %s) AND ("active" in ('Y','N'))) ORDER BY "startpoll" """ % (
s_Date, e_Date, id)
self._cr.execute(query)
status_records = self._cr.dictfetchall()
if not status_records:
return []
gst = 0
for records in status_records:
icp_id = record['ikp']
varcharge = 0
query2 = """SELECT "read_date" FROM dailycharges WHERE (("billstatus" = %s)
AND ("status" = 'B')) ORDER BY "read_date" desc limit 1""" % (
record['id'])
self._cr.execute(query2)
maxbill = self._cr.fetchone()
if maxbill:
unbill = datetime.strptime(maxbill[0]
else:
unbill = record['Start_Date']
start_date = max(invoice_start_date, str(unbill))
return data
这个函数中有两个简单的查询。我需要将它们转换为 ORM。提前致谢。
【问题讨论】:
-
它们可以替换为
search方法。WHERE子句将转换为 search domain,ORDER BY将替换为order参数 (order='read_date desc'),LIMIT子句可用作参数 (limit='1')。 -
@Kenly 如果可能的话,你能把它作为一个查询放在一行中吗?
-
我们需要定义 bill 和 dailycharges 模型。