Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何更改odoo中其他模型的默认字段值_Python_Openerp - Fatal编程技术网

Python 如何更改odoo中其他模型的默认字段值

Python 如何更改odoo中其他模型的默认字段值,python,openerp,Python,Openerp,当在form\u serial\u no\u idplot.allocate的多个字段中选取值时,如何将formdownloadmodel记录的状态字段默认值更改为true 我已经编写了一个方法来覆盖PlotAllocation模型的odoocreate函数,但它仍然没有将status字段的值更改为true。相反,它转到父类(plot.allocate)中create方法的override函数。每当我保存记录时,控件就会转到父方法的创建函数,并忽略继承plot.allocate模型的类plot

当在
form\u serial\u no\u id
plot.allocate的多个字段中选取值时,如何将
formdownload
model记录的状态字段默认值更改为true

我已经编写了一个方法来覆盖
PlotAllocation
模型的odoocreate函数,但它仍然没有将status字段的值更改为true。相反,它转到父类(plot.allocate)中create方法的override函数。每当我保存记录时,控件就会转到父方法的创建函数,并忽略继承
plot.allocate
模型的类
plot allocation
的创建函数。我怎样才能解决这个问题

从openerp导入模型、字段和api
类别CompanyName(models.Model):
_名称='companyname'
_记录名称='公司名称'
公司名称=fields.Char(string=“company name”,required=True)
company\u short\u code=fields.Char(string=“company short code”,required=True)
类表单下载(models.Model):
_名称='formdownload'
_记录名称='form\u serial\u no'
name=fields.manyOne('companyname',string=“companyname”,ondelete='cascade',
必需=真)
form\u serial\u no=fields.Char(string=“form serial no”,readonly=True)
status=fields.Boolean(string=“status”,默认值=False)
@api.model
def创建(自身、VAL):
serial\u no=self.env['ir.sequence'].get('formdownload.form\u serial\u no'))
代码=self.env['companyname'].浏览(VAL['name'])。公司代码
#将公司短代码值大写
code=code.upper()
#合并代码和序列号
VAL['form_serial_no']=代码+序列号
return super(FormDownload,self).create(vals)
类别分配(models.Model):
_inherit='plot.allocate'
form_serial_no_id=fields.manyOne('formdownload',
域=[('status','=',False)],
ondelete='cascade',string=“表单序列号”)
def创建(自身、VAL):
表格id=VAL['form\u serial\u no\u id']
form_obj=self.env['formdownload'].浏览(VAL['status'])
如果表格id:
form_obj.write({'status':True})
返回超级(PlotAllocation,self).create(VAL)
下面是父类的createoverride函数

class plot\u分配(osv.osv):
_name='plot.allocate'
_inherit=['mail.thread','ir.needaction\u mixin']
def创建(自身、cr、uid、VAL、上下文=无):
offer\u dt=vals.get('offer\u dt')
offer\u price=vals.get(‘offer\u price’)
plot\u no=vals.get('plot\u no')
付款计划=VAL.get(‘付款计划’)
#生成并存储报价信参考号
VAL['offer\u letter\u reference\u number']=self.pool.get(
'ir.sequence').get(cr,uid,'offer\u letter\u reference\u number')
#重写创建方法以防止创建重复打印
如果图号为:
plot\u no\u duplicate=self.search(
cr,uid,[('plot_no','=',plot_no)])
如果绘图不重复:
升高osv,但不升高osv(
_(‘重复!),
_(‘地块编号已分配或已开放分配’)
#将未分配绘图的状态更改为已分配到单元\u主
unit\u master=self.pool.get('unit.master')。浏览(cr、uid、绘图编号)
#将单元_主控中的相应绘图更改为已分配
单元主机写入({'status':'allocated'})
项目和绘图id=super(
绘图(分配,自行)。创建(
cr、uid、VAL、上下文=上下文)
plot=self.browse(cr、uid、项目和plot\id,context=context)
如果付款计划:
自行计算付款计划(cr、uid、绘图、报价、付款计划)
返回项目和绘图id
试试这个:

@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)

我尝试了此代码,但效果很好:

@api.model
def创建(自身、VAL):
rec_id=super(PlotAllocation,self).create(vals)
如果记录id.form\u serial\u no\u id:
#引发异常。ValidationError('此处的代码应将companyname的状态设置为true')
#打印“您的代码在此处应使companyname的状态为true”
rec_id.form_serial_no_id.status=True
返回记录id
试试这个:

@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)

您正在比较布尔值和整数,这有意义吗<代码>如果VAL['form\u serial\u no\u id']==状态:这里的VAL['name']是什么?您在这里使用的是哪个版本的odoo?@bhuro,我使用odoo 8谢谢您的回复,但没有任何变化。还是一样。我意识到父类(plot.allocate)中有一个create方法的重写函数,所以每当我保存记录时,控件都会转到父方法的create函数,忽略继承plot.allocate模型的类“PlotAllocation”的create函数。如何修复此问题?匹配返回super(class_inherit_name,self).create(vals),因为它将覆盖默认方法。感谢rinaldi,问题是程序流根本没有进入create函数。如果可以在控制台中看到print,请将add添加到commented行取消对print行的注释,否则请取消对raise行的注释,看看代码是否真的冷却了您的create方法,因为我尝试了这个方法,它工作得很好。否,我没有收到任何消息。您是否在init.py文件pjt中的create方法的第一行中放置了模式“raise exception”,并逐个检查您必须导入的hour模块的init文件。我的意思是检查你的结构你做错了什么把引发异常放在第一行如果你没有收到信息检查你文件的结构缩进代码应该一直检查直到找到你做错了什么我按照你说的做了,我意识到有一个覆盖函数create中的方法