在Odoo 10中,当我使用名为'create'的方法创建记录时,如何在create_date,create_uid中指定数据,而不是系统中的值

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

我在本地数据库中使用名为create()的方法创建了一条新记录,并从远程数据库中提取了数据。众所周知,Odoo中有四个普通字段,例如create_datewrite_datecreate_uidwrite_uid。我希望这些数据位于远程数据库中,但是当我使用名为create()的方法创建记录时,这些数据是本地创建时的数据,而不是远程数据。

例如,在远程数据库中,creat_date为'2019-10-11',即使将远程数据库的值传递给字典,也无法更改最终写入本地数据库的值最后,名为create_date的字段的值为'2019-12-03'而不是'2019-10-11'。'2019-12-03'是现在的日期。其他字段的情况类似为write_datecreate_uidwrite_uid

[感谢所有考虑此问题的人。

以下是我的代码。

[Class Model

class ReportRentalIncomeFromProperty(models.Model):
    _name = 'report.rental.income.from.property'
    _description = 'The report about the income from property rental'
    _order = 'product_id, start_date'

    # create_date = fields.Datetime('Created on')
    create_uid = fields.Char('Created by')
    # write_date = fields.Datetime('Last Modified on')
    write_uid = fields.Char('Last Contributor')

    product_id = fields.Many2one('product.product', 'Property House')
    area_id = fields.Many2one('res.country.area', 'City')
    district_id = fields.Many2one('res.country.district', 'District')
    town_id = fields.Many2one('res.country.town', 'Town')
    road_name = fields.Char('Road')
    start_date = fields.Date('Start Date')
    end_date = fields.Date('End Date')
    should_pay = fields.Float('Should Pay')
    real_pay = fields.Float('Real Pay')
    balance_pay = fields.Float('Balance Pay')
    rental_compliance_rate = fields.Float('Rental Compliance Rate(%)', group_operator="avg")


    company_id = fields.Many2one('res.company', string='Company')

    parent_company_id = fields.Many2one('res.company', related='company_id.parent_id', store=True,
                                        string='Parent Company')


    actual_business = fields.Many2many(
        'rh.commercial.activities',
        'house_rental_rent_income_business_db',
        'actual_business_id',
        'commercial_activities_id',
        string='Actual business')  

功能提取远程数据以在本地数据库中创建新记录。

@api.multi
    def synchronization_contract_performance_rate(self):

        self.env['report.rental.income.from.property'].search([]).unlink()

        product_dict = {}
        A_product = self.env['product.product'].search([])
        for a in A_product:
            product_dict[a.name] = a.id

        activities_dict = {}
        D_activities = self.env['rh.commercial.activities'].search([])
        for d in D_activities:
            activities_dict[d.name] = d.id

        address_dict = {}
        i = 0
        address_model_list = ['res.country.area', 'res.country.district', 'res.country.town']
        address_field_list = ['area_id', 'district_id', 'town_id']
        for addr in address_model_list:
            C_address = self.env[addr].search([])
            addr_dict = {}
            for c in C_address:
                addr_dict[c.name] = c.id
            address_dict[i] = addr_dict
            i += 1

        record_list_1 = self.company_recursive_func()

        for list_1 in record_list_1:
            database = list_1[0]
            link_url = list_1[1]
            if link_url.startswith('http://'):
                _uri = link_url.replace('http://', '')
                my_odoo = odoorpc.ODOO(_uri, port=48080)
            if link_url.startswith('https://'):
                _uri = link_url.replace('https://', '')
                my_odoo = odoorpc.ODOO(_uri, port=443, protocol='jsonrpc+ssl')

            username = list_1[2]
            password = list_1[3]

            my_odoo.login(database, username, password)

            company_id = list_1[4]
            company_code = list_1[5]

            product_actual_business_dict = {}
            A_product_actual_business_ids = my_odoo.env['product.product'].search([])
            A_product_actual_business = my_odoo.execute('product.product', 'read', A_product_actual_business_ids,
                                                        ['actual_business'])
            for a in A_product_actual_business:
                name_list = []
                for b in my_odoo.execute('rh.commercial.activities', 'read', a.get('actual_business'), ['name']):
                    name_list.append(b.get('name'))
                product_actual_business_dict[a.get('id')] = name_list


            remote_ids = my_odoo.env['report.rental.income.from.property'].search([])
            remote_data_dict = my_odoo.execute('report.rental.income.from.property', 'read', remote_ids, ['product_id',
                                                                                                          'start_date',
                                                                                                          'create_date',
                                                                                                          'create_uid',
                                                                                                          'write_date',
                                                                                                          'write_uid',
                                                                                                          'end_date',
                                                                                                          'should_pay',
                                                                                                          'balance_pay',
                                                                                                          'real_pay',
                                                                                                          'rental_compliance_rate',
                                                                                                          'area_id',
                                                                                                          'road_name',
                                                                                                          'district_id',
                                                                                                          'town_id'])

            for data in remote_data_dict:



                remote_product_name = data.get('product_id')[1]
                product_id = product_dict.get(remote_product_name + '(' + company_code + ')',
                                              None)

                if product_id:
                    i = 0
                    address_id_list = []
                    for address_field in address_field_list:
                        if data.get(address_field):
                            remote_address_name = data.get(address_field)[1]
                            local_address_id = address_dict[i].get(remote_address_name, None)
                            address_id_list.append(local_address_id)
                        else:
                            address_id_list.append(None)
                        i += 1


                    ids_list = []
                    find_names = product_actual_business_dict.get(data.get('product_id')[0])
                    for find_name in find_names:
                        id = activities_dict.get(find_name, None)
                        if id:
                            ids_list.append(id)


                            value = {
                                'product_id': product_id,  
                                'area_id': address_id_list[0],  
                                'district_id': address_id_list[1],  
                                'town_id': address_id_list[2],  
                                'road_name': data['road_name'],  
                                'start_date': data['start_date'],  
                                'end_date': data['end_date'],  
                                'should_pay': data['should_pay'],
                                'real_pay': data['real_pay'],
                                'create_date': data['create_date'],
                                'create_uid': data['create_uid'][1],
                                'write_date': data['write_date'],
                                'write_uid': data['write_uid'][1],
                                'balance_pay':data['balance_pay'],
                                'rental_compliance_rate': data['rental_compliance_rate'],
                                'company_id': company_id,  
                                'actual_business': [(6, 0, ids_list)]
                            }




                self.env['report.rental.income.from.property'].create(value)

            my_odoo.logout()
python xml odoo odoo-10
1个回答
1
投票
您可以使用sql查询创建记录后更改标准的odoo字段
© www.soinside.com 2019 - 2024. All rights reserved.