3
v^p                 @   s0   d dl mZmZ d dlmZ G dd deZdS )    )Http404JsonResponse)BaseListViewc               @   s:   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|s:tddiddS |jjdd| _	| j
 | _| j }tdd	 |d
 D d|d j id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 Forbiddeni  )statusterm c             S   s    g | ]}t |jt |d qS ))idtext)strpk).0obj r   K/usr/lib/python3.6/site-packages/django/contrib/admin/views/autocomplete.py
<listcomp>   s   z,AutocompleteJsonView.get.<locals>.<listcomp>object_listZmorepage_obj)resultsZ
pagination)model_adminget_search_fieldsr   type__name__has_permr   GETgetr	   get_querysetr   get_context_datahas_next)selfrequestargskwargscontextr   r   r   r   
   s    


zAutocompleteJsonView.getc             O   s   | j j| jf||S )zUse the ModelAdmin's paginator.)r   get_paginatorr"   )r!   r#   r$   r   r   r   r&   %   s    z"AutocompleteJsonView.get_paginatorc             C   s6   | j j| j}| j j| j|| j\}}|r2|j }|S )z9Return queryset based on ModelAdmin.get_search_results().)r   r   r"   get_search_resultsr	   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   has_view_permission)r!   r"   r   r   r   r   r   1   s    zAutocompleteJsonView.has_perm)N)
r   
__module____qualname____doc__paginate_byr   r   r&   r   r   r   r   r   r   r      s   r   N)django.httpr   r   django.views.generic.listr   r   r   r   r   r   <module>   s   