覆写功能 [英] Overide write function

查看:86
本文介绍了覆写功能的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

他在那里我试图重写写函数以更改'fci_student'模型和'fci_standard'模型中的学生'标准',但是没有运气:(我能帮上什么忙吗?

He there i tried to override write function to change the student 'standard' in 'fci_student' model and 'fci_standard' model but no luck :( could i have some help ?

这是我的学生桌模型:

from openerp.osv import osv, fields
from datetime import date
from dateutil.relativedelta import relativedelta


class fci_student(osv.osv):
    _name = 'fci.student'
    _columns = {
        'photo': fields.binary(string='Photo'),
        'name': fields.char(size=128, string='First Name', required=True),
        'middle_name': fields.char(size=128, string='Middle Name', required=True),
        'last_name': fields.char(size=128, string='Last Name', required=True),
        'status': fields.selection([('under_Age', 'Under Age'), ('get_card', 'Get Card'), ('got_card', 'Got Card')],
                                   string='Military Status'
                                   , default='under_Age'),
        # basic details
        'user_id': fields.many2one('res.users', 'User'),
        "birth_date": fields.date(string='Birth Date', required=True),
        'gender': fields.selection([('m', 'Male'), ('f', 'Female'), ('o', 'Other')], string='Gender', required=True),
        'title': fields.selection([('mr', 'Mr.'), ('ms', 'Mrs.')], string='Title'),
        'Paid': fields.boolean('Paid Student'),
        'nationality': fields.many2one('res.country', string='Nationality'),
        'id_number': fields.char(size=64, string='ID Card Number', required=True),
        'phone': fields.char(string='Phone Number', size=256, required=True),
        'email_address': fields.char(string='E-mail', size=256, required=True),
        'pay_amount': fields.char(size=64, string='Payment', required=True),
        # Edictional details
        'standard_id': fields.many2one('fci.standard', string='Standard', required=True),
        'group_id': fields.many2one('fci.standard.groups',string='Groups(s)'),

        'terms_id': fields.many2one('fci.terms', string='Term'),
        'sit_number': fields.integer(size=128, string='Sit Number',required=True),
        'subject_id':fields.many2many('fci.subject','student_sub_rel','sub_student_rel','sub_stu_id','Subjects'),
        # Parent details
        'parent_name': fields.char(size=128, string='Parent First Name'),
        'parent_middle_name': fields.char(size=128, string='Parent First Name'),
        'parent_last_name': fields.char(size=128, string='Parent First Name'),
        'parent_phone': fields.integer(size=128, string='Parent Number'),
        'parent_ids': fields.char(size=128, string='Parent E-mail'),
        # Library details
        'library_card_number': fields.char(size=64, string='Library Card Number'),
        'library_card_type': fields.char(size=64, string='Library Card type'),
        'number_of_books_allow': fields.char(size=64, string='Number of books allow'),
        # Address details
        'street_name': fields.char(size=128, string='Street', required=True),
        'city_name': fields.char(size=128, string='City', required=True),
        'state_name': fields.char(size=128, string='State', required=True),
        'Zip': fields.char(size=128, string='Zip Code'),
        'country': fields.char(size=128, string='country', required=True),
        #Exams
        'exam_res': fields.char(size=128, string='Results'),
        'grade': fields.char(size=128, string='Results'),
        'percentage': fields.char(size=128, string='Results'),

    }
#write function to edit student and move him from Standard A to standard B
   def write(self, cr, uid, ids, values, context = None):
       res = super(fci_student, self).write(cr, uid, ids, values, context = context)
       if values.get('standard_id'):
           self.pool.get('fci.standard').write(cr, uid, values['standard_id'], {'student_ids' : [(0, 0, values)]}, context=context)

       return res
#create function to add student to standard model
def create(self, cr, uid, vals, context=None):
        context = context or {}
        created_id = super(fci_student, self).create(cr, uid, vals, context=context)
        if vals.get('standard_id') and vals.get('group_id'):
            self.pool.get('fci.standard').write(cr, uid, vals['standard_id'],
                                                {'student_ids': [(4, created_id)]}, context=context)
            self.pool.get('fci.standard.groups').write(cr, uid, vals['group_id'],
                                                {'student_ids': [(4, created_id)]}, context=context)

这是我的标准表模型:

from openerp.osv import osv, fields

class fci_standard(osv.osv):
    _name = 'fci.standard'
    _order = 'sequence'
    _columns = {
        'code': fields.char(size=8, string='Code', required=True),
        'name': fields.char(size=32, string='Name', required=True),
        'sequence': fields.integer('Sequence'),
        'student_ids': fields.many2many('fci.student', 'student_standard_rel', 'fci_student_standard_id', 'standard_id',
                                        string='Student(s)'),
        'groups_ids': fields.many2many('fci.standard.groups', 'standard_group_rel', 'fci_standard_group_id', 'standard_group_id',
                                        string='Groups(s)'),

    }
fci_standard()

它只更改了'fci_student'中的标准,但没有将学生从标准模型中的标准'A'转移到标准'B'!

it only change the standard in 'fci_student' but it didn't move the student from standard 'A' to standard 'B ' in the standard model!!

推荐答案

您在学生和标准之间定义了错误的关系, 在fci.student中有standard_idmany2one,然后在fci.standard中对于student_ids必须存在one2many关系,然后只有在更改任何学生的标准时,您才能获得自动效果.

You have defined wrong relationship between student and standard, in fci.student there is standard_id is many2one then there must be one2many relation in fci.standard for student_ids then and only then you will get auto effect while you changed the standard of any students.

在您的情况下,无需重写write方法,只需更改如下所示的字段定义,

In your case no need to override write method just changed the fields definition like below,

'student_ids': fields.one2many('fci.student', 'standard_id','Student(s)'),

当您更改任何学生的标准时,您将看到双方的效果.您还需要重新启动服务器并更新模块.

When you changed standard of any students then you will see effect at both side. you need to restart server and update module as well.

这篇关于覆写功能的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆