我有一个应该打印报告的方法。有两个报告使用相同的方法打印但具有不同的条件。我已经给出了if-else条件,但有些原因是else部分没有被执行! 请帮助我解决问题
count = 80
a = 20
if a > count:
return xyz
else:
return abc
abc和xyz是我有两种不同类型的报告。
编辑: 这是我的实际功能。在每一个我拿起我的记录。
for inv_no in each:
if inv_no.invoice_date > '2017-06-30':
return {
'type': 'ir.actions.report.xml',
'report_name': 'gst_invoice_print',
'datas': datas,
}
else:
return {
'type': 'ir.actions.report.xml',
'report_name': 'invoice_print',
'datas': datas,
}
答案 0 :(得分:1)
我不明白你的问题,因为你的代码完美无缺。 以下代码适用于我:
count = 80
a = 20
def test(a, count):
if a > count:
return "xyz"
else:
return "abc"
print test(a,count)
它返回“abc”......
答案 1 :(得分:1)
我看到了你的最后一次表扬,所以你应该如何比较日期。
Odoo日期在将它们转换为datetime对象之前是不可比的,因此要将odoo日期转换为datetime对象使用:
a = datetime.strptime(self.date_field1, "%Y-%m-%d")
b = datetime.strptime(self.date_field1, "%Y-%m-%d")
# where date_field1 and date_field2 are something like this 2017-01-01
# now you can compare a and b
if a < b:
drink beer
else:
drink more beer
答案 2 :(得分:1)
现在我们确切地知道发生了什么,Python的返回声明实际上已退出&#39;之后该功能不再继续。您需要的是跟踪所有报告,然后返回它而不是立即返回。一种方法是使用列表或元组。
我更喜欢列表,因为它们是可变的以备将来使用,但如果您需要使用元组,请使用( )
代替[ ]
。
reports = []
for inv_no in each:
if inv_no.invoice_date > '2017-06-30':
reports.append({
'type': 'ir.actions.report.xml',
'report_name': 'gst_invoice_print',
'datas': datas,
})
else:
reports.append({
'type': 'ir.actions.report.xml',
'report_name': 'invoice_print',
'datas': datas,
})
return reports
这样您就可以获得每个日期的相应报告。要在代码中稍后访问报告,请使用reports["index of list"]["key of dict"]
答案 3 :(得分:0)
嗯,你提供的代码总是会打印报告abc,因为你比较的东西总是返回false(正如其他人所说的那样)。
如果您确实想要根据情况检索两个报告中的任何一个,(在比较的情况下)一个或两个值都应该是可变的。因此,它们需要由用户输入,功能参数或输入的计算机(例如计算机提供的变量。与时间一样)
现在,如果您提供的代码片段代表函数的一部分并假设count
变量跟踪迭代,则需要在迭代后使用return语句以确保所有内容都已计入对
for count in list:
# Do something
if a > count:
return xyz
else:
return abc
但是,a
变量或list
变量(不使用list作为变量的名称,这只是一个示例)必须是可变的。否则该函数将始终返回相同的内容。
作为备注: 如果您需要更多相关答案,请添加更多代码以更好地表示您所要求的内容(例如函数,类或检索并随后操作输入的区域)。不要只提供出现错误的代码,还要提供导致错误的代码。