Как я могу сравнить поле одной модели с полем в другой модели в odoo - PullRequest
0 голосов
/ 05 марта 2020

Я использую OpenEduCat для своего института на 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' не определен.

1 Ответ

0 голосов
/ 06 марта 2020

Обращаем ваше внимание, что ошибка возникает из-за того, что внутри функции вы не определили переменную course_detail_ids. Я думаю, что вы пытаетесь сравнить exam_line.subject_id.name с exam_session.course_id.name

...