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

_name = "product.attribute.line"
    _rec_name = 'attribute_id'
    _columns = {
        'product_tmpl_id': fields.many2one('product.template', 'Product Template', required=True, ondelete='cascade'),
        'attribute_id': fields.many2one('product.attribute', 'Attribute', required=True, ondelete='restrict'),
        'value_ids': fields.many2many('product.attribute.value', id1='line_id', id2='val_id', string='Product Attribute Value'),
    }
    def _check_valid_attribute(self, cr, uid, ids, context=None):
        obj_pal = self.browse(cr, uid, ids[0], context=context)
        return obj_pal.value_ids <= obj_pal.attribute_id.value_ids
    _constraints = [
        (_check_valid_attribute, 'Error ! You cannot use this attribute with the following value.', ['attribute_id'])
    ]
class product_template(osv.osv):
    _name = "product.template"
    _inherit = ['mail.thread']
    _description = "Product Template"
    _order = "name"
    def _get_image(self, cr, uid, ids, name, args, context=None):
        result = dict.fromkeys(ids, False)
        for obj in self.browse(cr, uid, ids, context=context):
            result[obj.id] = tools.image_get_resized_images(obj.image, avoid_resize_medium=True)
        return result
    def _set_image(self, cr, uid, id, name, value, args, context=None):