def METHOD_NAME(self, name, value, attrs=None, renderer=None):
    obj = self.obj_for_value(value)
    css_id = attrs.get('id')
    css_id_folder = "%s_folder" % css_id
    css_id_description_txt = "%s_description_txt" % css_id
    if attrs is None:
        attrs = {}
    related_url = None
    if value:
        try:
            folder = Folder.objects.get(pk=value)
            related_url = folder.get_admin_directory_listing_url_path()
        except Exception:
            pass
    if not related_url:
        related_url = reverse('admin:filer-directory_listing-last')
    params = self.url_parameters()
    params['_pick'] = 'folder'
    if params:
        url = '?' + urlencode(sorted(params.items()))
    else:
        url = ''
    if 'class' not in attrs:
        # The JavaScript looks for this hook.
        attrs['class'] = 'vForeignKeyRawIdAdminField'
    super_attrs = attrs.copy()
    hidden_input = super(ForeignKeyRawIdWidget, self).METHOD_NAME(name, value, super_attrs)  # grandparent super
    # TODO: "id_" is hard-coded here. This should instead use the correct
    # API to determine the ID dynamically.
    context = {
        'hidden_input': hidden_input,
        'lookup_url': '{}{}'.format(related_url, url),
        'lookup_name': name,
        'span_id': css_id_description_txt,
        'object': obj,
        'clear_id': '%s_clear' % css_id,
        'descid': css_id_description_txt,
        'foldid': css_id_folder,
        'id': css_id,
    }
    html = render_to_string('admin/filer/widgets/admin_folder.html', context)
    return mark_safe(html)