如果在formdownload
模型的form_serial_no_id
Many2one字段中选择值,如何将plot.allocate
模型记录的状态字段默认值更改为true?
我编写了一个方法来覆盖PlotAllocation
模型的odoo创建函数,但它仍然没有将status字段的值更改为true。相反,它转到父类(plot.allocate)中create方法的override函数。无论何时我保存记录,控制都会转到父方法的create函数,并忽略继承PlotAllocation
模型的类plot.allocate
的create函数。我该如何解决这个问题?
from openerp import models, fields, api
class CompanyName(models.Model):
_name = 'companyname'
_rec_name = 'company_name'
company_name = fields.Char(string="Company Name", required=True)
company_short_code = fields.Char(string="Company short code", required=True)
class FormDownload(models.Model):
_name = 'formdownload'
_rec_name = 'form_serial_no'
name = fields.Many2one('companyname', string="Company Name", ondelete='cascade',
required=True)
form_serial_no = fields.Char(string="Form Serial No", readonly=True)
status = fields.Boolean(string="Status", default=False)
@api.model
def create(self, vals):
serial_no = self.env['ir.sequence'].get('formdownload.form_serial_no')
code = self.env['companyname'].browse(vals['name']).company_short_code
# capitalize company short code values
code = code.upper()
# merge code and serial number
vals['form_serial_no'] = code + serial_no
return super(FormDownload, self).create(vals)
class PlotAllocation(models.Model):
_inherit = 'plot.allocate'
form_serial_no_id = fields.Many2one('formdownload',
domain=[('status', '=', False)],
ondelete='cascade', string="Form Serial No")
def create(self, vals):
form_id = vals['form_serial_no_id']
form_obj = self.env['formdownload'].browse(vals['status'])
if form_id:
form_obj.write({'status': True})
return super(PlotAllocation, self).create(vals)
这是父类
的创建覆盖功能class plot_allocate(osv.osv):
_name = 'plot.allocate'
_inherit = ['mail.thread', 'ir.needaction_mixin']
def create(self, cr, uid, vals, context=None):
offer_dt = vals.get('offer_dt')
offer_price = vals.get('offer_price')
plot_no = vals.get('plot_no')
payment_plan = vals.get('payment_plan')
# generate and store the offer letter reference number
vals['offer_letter_reference_number'] = self.pool.get(
'ir.sequence').get(cr, uid, 'offer_letter_reference_number')
# override creation method to prevent creation of duplicate plots
if plot_no:
plot_no_duplicate = self.search(
cr, uid, [('plot_no', '=', plot_no)])
if plot_no_duplicate:
raise osv.except_osv(
_('Duplicate!'),
_('Plot No is allocated or is open for allocation already'))
# change status of unallocated plots to allocated in unit_master
unit_master = self.pool.get('unit.master').browse(cr, uid, plot_no)
# change corresponding plot in unit_master to allocated
unit_master.write({'status': 'allocated'})
project_and_plot_id = super(
plot_allocate, self).create(
cr, uid, vals, context=context)
plot = self.browse(cr, uid, project_and_plot_id, context=context)
if payment_plan:
self.calc_payment_plan(cr, uid, plot, offer_dt, payment_plan)
return project_and_plot_id
答案 0 :(得分:1)
试试这个:
@api.model
def create(self, vals):
status = self.env['formdownload'].browse(vals['form_serial_no_id'])
if self.form_serial_no_id.id == status.status:
status.write({'status': True})
return super(PlotAllocation, self).create(vals)
答案 1 :(得分:0)
我尝试了这段代码,它运行得很好:
@api.model
def create(self, vals):
rec_id = super(PlotAllocation, self).create(vals)
if rec_id.form_serial_no_id :
# raise exceptions.ValidationError('Your code is here should make the status of companyname to true')
# print 'Your code is here should make the status of companyname to true'
rec_id.form_serial_no_id.status = True
return rec_id
答案 2 :(得分:0)
试试这个:
@api.model
def create(self, vals):
form_id = vals['form_serial_no_id'].id
form_obj = self.env['formdownload'].browse([form_id])
if your condition:
form_obj.write({'status':True})
return super(PlotAllocation, self).create(vals)