我如何比较一个模型的字段与odoo中另一个模型的字段

问题描述 投票:0回答:1

我正在将我的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'。

python-3.x report odoo
1个回答
0
投票

请注意,由于未在函数内部定义变量course_detail_ids,因此出现错误。我认为您正在尝试将exam_line.subject_id.name与exam_session.course_id.name

进行比较
© www.soinside.com 2019 - 2024. All rights reserved.