<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def prepare(_next, self):
 """Hook after prepare and set 'portrait' as image widget to ``self.form``. """

        _next(self)
        if not self.portrait_support:
            return
        model = self.model
        request = self.request
        if request.has_permission('edit_user', model.parent):
            mode = 'edit'
        else:
            mode = 'display'
        cfg = ugm_general(model)
        image_attr = cfg.attrs['users_portrait_attr']
        image_accept = cfg.attrs['users_portrait_accept']
        image_width = int(cfg.attrs['users_portrait_width'])
        image_height = int(cfg.attrs['users_portrait_height'])
        image_data = model.attrs.get(image_attr)
        if image_data:
            image_value = {
                'file': BytesIO(image_data),
                'mimetype': 'image/jpeg',
            }
            image_url = make_url(request, node=model,
                                 resource='portrait_image')
        else:
            image_value = UNSET
            resource = 'cone.ugm.static/images/default_portrait.jpg'
            image_url = make_url(request, node=model.root, resource=resource)
        portrait_widget = factory(
            'field:label:error:image',
            name='portrait',
            value=image_value,
            props={
                'label': _('portrait', default='Portrait'),
                'src': image_url,
                'alt': _('portrait', default='Portrait'),
                'accept': image_accept,
                'minsize': (image_width, image_height),
                'crop': {
                    'size': (image_width, image_height),
                    'fitting': True,
                }
            },
            mode=mode)
        save_widget = self.form['save']
        self.form.insertbefore(portrait_widget, save_widget)