Impacted versions: all

On the model "ir.model.field" there is a field called "copy" : https://github.com/odoo/odoo/blob/master/odoo/addons/base/models/ir_model.py#L322

This name conflict with the method "copy" that exist browse record
https://github.com/odoo/odoo/blob/master/odoo/models.py#L4203

This make impossible to use the method copy on ir.model.field
And also raise warning when we make an inherits of the class ir.model.field (https://github.com/odoo/odoo/blob/master/odoo/models.py) as the field conflict with the method name

@odony @rco-odoo 

odoo/addons/test_new_api/tests/test_schema.py
from odoo.models import MetaModel
from odoo.tests import common
class TestReflection(common.TransactionCase):
    """ Test the reflection into 'ir.model', 'ir.model.fields', etc. """
    def test_models_fields(self):
        """ check that all models and fields are reflected as expected. """
        
        model_names = {cls._name for cls in MetaModel.module_to_models['test_new_api']}
        ir_models = self.env['ir.model'].search([('model', 'in', list(model_names))])
        self.assertEqual(len(ir_models), len(model_names))
        for ir_model in ir_models:
            model = self.env[ir_model.model]
            self.assertEqual(ir_model.name, model._description or False)
            self.assertEqual(ir_model.state, 'manual' if model._custom else 'base')
            self.assertEqual(ir_model.transient, bool(model._transient))
            self.assertItemsEqual(ir_model.mapped('field_id.name'), list(model._fields))
            for ir_field in ir_model.field_id:
                field = model._fields[ir_field.name]
                self.assertEqual(ir_field.model, field.model_name)
                self.assertEqual(ir_field.field_description, field.string)
                self.assertEqual(ir_field.help, field.help or False)
                self.assertEqual(ir_field.ttype, field.type)