
vÅÏ^p  ã               @   s@   d  d l  m Z m Z d  d l m Z Gd d „  d e ƒ Z d S)é    )ÚHttp404ÚJsonResponse)ÚBaseListViewc               @   sU   e  Z d  Z d Z d Z d Z d d „  Z d d „  Z d d	 „  Z d d
 d „ Z	 d S)ÚAutocompleteJsonViewz3Handle AutocompleteWidget's AJAX requests for data.é   Nc             O   s½   |  j  j | ƒ s. t d t |  j  ƒ j ƒ ‚ |  j | ƒ sS t d d i d d ƒS| j j d d ƒ |  _	 |  j
 ƒ  |  _ |  j ƒ  } t d d	 d
 „  | d Dƒ d d | d j ƒ  i i ƒ S)z±
        Return a JsonResponse with search results of the form:
        {
            results: [{id: "123" text: "foo"}],
            pagination: {more: true}
        }
        z5%s must have search_fields for the autocomplete_view.Úerrorz403 ForbiddenÚstatusi“  ÚtermÚ Úresultsc             S   s1   g  |  ]' } d  t  | j ƒ d t  | ƒ i ‘ q S)ÚidÚtext)ÚstrÚpk)Ú.0Úobj© r   úI/tmp/pip-build-8lau8j11/django/django/contrib/admin/views/autocomplete.pyú
<listcomp>   s   	z,AutocompleteJsonView.get.<locals>.<listcomp>Úobject_listZ
paginationZmoreZpage_obj)Úmodel_adminZget_search_fieldsr   ÚtypeÚ__name__Úhas_permr   ÚGETÚgetr	   Úget_querysetr   Zget_context_dataZhas_next)ÚselfÚrequestÚargsÚkwargsÚcontextr   r   r   r   
   s    	zAutocompleteJsonView.getc             O   s   |  j  j |  j | | Ž S)zUse the ModelAdmin's paginator.)r   Úget_paginatorr   )r   r   r    r   r   r   r"   %   s    z"AutocompleteJsonView.get_paginatorc             C   sO   |  j  j |  j ƒ } |  j  j |  j | |  j ƒ \ } } | rK | j ƒ  } | S)z9Return queryset based on ModelAdmin.get_search_results().)r   r   r   Zget_search_resultsr	   Zdistinct)r   ÚqsZsearch_use_distinctr   r   r   r   )   s
    $z!AutocompleteJsonView.get_querysetc             C   s   |  j  j | d | ƒS)z9Check if user has permission to access the related model.r   )r   Zhas_view_permission)r   r   r   r   r   r   r   1   s    zAutocompleteJsonView.has_perm)
r   Ú
__module__Ú__qualname__Ú__doc__Zpaginate_byr   r   r"   r   r   r   r   r   r   r      s   r   N)Zdjango.httpr   r   Zdjango.views.generic.listr   r   r   r   r   r   Ú<module>   s   