Impacted versions: 8.0

Steps to reproduce:
- Create a database with demo data
- Go to sales, product categories & attributes, attribute values
- Click on 'attribute' column name

Current behavior:
Attribute values are sorted by attribute database ID

Expected behavior:
Attribute values are sorted by attribute name

addons/product/product.py
'image_small': fields.function(_get_image, fnct_inv=_set_image,
            string="Small-sized image", type="binary", multi="_get_image",
            store={
                'product.template': (lambda self, cr, uid, ids, c={}: ids, ['image'], 10),
            },
            help="Small-sized image of the product. It is automatically "\
                 "resized as a 64x64px image, with aspect ratio preserved. "\
                 "Use this field anywhere a small image is required."),
        'packaging_ids': fields.one2many(
            'product.packaging', 'product_tmpl_id', 'Logistical Units',
            help="Gives the different ways to package the same product. This has no impact on "
                 "the picking order and is mainly used if you use the EDI module."),
        'seller_ids': fields.one2many('product.supplierinfo', 'product_tmpl_id', 'Supplier'),
        'seller_delay': fields.related('seller_ids','delay', type='integer', string='Supplier Lead Time',
            help="This is the average delay in days between the purchase order confirmation and the receipts for this product and for the default supplier. It is used by the scheduler to order requests based on reordering delays."),
        'seller_qty': fields.related('seller_ids','qty', type='float', string='Supplier Quantity',
            help="This is minimum quantity to purchase from Main Supplier."),
        'seller_id': fields.related('seller_ids','name', type='many2one', relation='res.partner', string='Main Supplier',
            help="Main Supplier who has highest priority in Supplier List."),
        'active': fields.boolean('Active', help="If unchecked, it will allow you to hide the product without removing it."),
        'color': fields.integer('Color Index'),
        'is_product_variant': fields.function( _is_product_variant, type='boolean', string='Is product variant'),
        'attribute_line_ids': fields.one2many('product.attribute.line', 'product_tmpl_id', 'Product Attributes'),
        'product_variant_ids': fields.one2many('product.product', 'product_tmpl_id', 'Products', required=True),
        'product_variant_count': fields.function( _get_product_variant_count, type='integer', string='# of Product Variants'),
        
        'ean13': fields.related('product_variant_ids', 'ean13', type='char', string='EAN13 Barcode'),
        'default_code': fields.related('product_variant_ids', 'default_code', type='char', string='Internal Reference'),
    }
    def _price_get_list_price(self, product):