我正在将我的OpenOduCat用于odoo 12.0和13.0。如果所有学生在一个学期或课程中都具有相同的科目,则“学生大厅票务报告”将正常工作。当学生在同一学期或考试课程中选择选修科目时,就会出现问题。 “学生馆门票报告”会在每个学生馆门票/卷纸上打印所有主题,而应该仅在学生所注册的学生馆门票/纸上打印那些主题。至于我搜索并尝试解决的问题,我得出的结论是,该报告将所有科目都提供给考试。我必须将考试期间提供的科目与每个学生已注册的科目进行比较,如果两者相同,则应将其打印在学生的入场券上。请帮助我比较两个模型中的主题字段; op.exam.session(exam_session)和op.student.course(op_student_course),并有条件地打印主题。提前感谢。我的.py文件如下:
import time
from odoo import models, fields, api
class ReportTicket(models.AbstractModel):
_name = "report.openeducat_exam.report_ticket"
_description = "Exam Ticket Report"
def get_date(self, exam_line):
timestamp = fields.Datetime.context_timestamp
dt = fields.Datetime
schedule_start = timestamp(self, dt.from_string(exam_line.start_time))
schedule_end = timestamp(self, dt.from_string(exam_line.end_time))
schedule_start = fields.Datetime.to_string(schedule_start)
schedule_end = fields.Datetime.to_string(schedule_end)
return schedule_start[11:] + ' To ' + schedule_end[11:]
def get_subject(self, exam_session):
lst = []
for exam_line in exam_session['exam_ids']:
res1 = {
'subject': exam_line.subject_id.name,
'date': fields.Datetime.to_string(exam_line.start_time)[:10],
'time': self.get_date(exam_line),
'sup_sign': ''
}
lst.append(res1)
return lst
def get_data(self, data):
final_lst = []
exam_session = self.env['op.exam.session'].browse(
data['exam_session_id'][0])
student_search = self.env['op.student'].search(
[('course_detail_ids.course_id', '=', exam_session.course_id.id)])
for student in student_search:
student_course = self.env['op.student.course'].search(
[('student_id', '=', student.id),
('course_id', '=', exam_session.course_id.id)])
res = {
'exam': exam_session.name,
'exam_code': exam_session.exam_code,
'course': exam_session.course_id.name,
'student': student.name,
'image': student.image_1920,
'roll_number': student_course.roll_number,
'line': self.get_subject(exam_session),
}
final_lst.append(res)
return final_lst
@api.model
def _get_report_values(self, docids, data=None):
model = self.env.context.get('active_model')
docs = self.env[model].browse(self.env.context.get('active_id'))
docargs = {
'doc_ids': self.ids,
'doc_model': model,
'docs': docs,
'time': time,
'get_data': self.get_data(data),
}
return docargs
我正在寻找这样的东西:
def get_subject(self, exam_session):
lst = []
for exam_line in exam_session['exam_ids']:
res1 = {
'subject': exam_line.subject_id.name,
'date':
fields.Datetime.to_string(exam_line.start_time)[:10],
'time': self.get_date(exam_line),
'sup_sign': ''
}
If exam_line.subject_id.name ==
course_detail_ids.subject_id.name:
lst.append(res1)
return lst
但是它给出了错误,即未定义对象'course _detail_id'。
请注意,由于未在函数内部定义变量course_detail_ids,因此出现错误。我认为您正在尝试将exam_line.subject_id.name与exam_session.course_id.name
进行比较