
    Nwg                         d dl mZ d dlmZ d dlmZ d dlmZ d dlm	Z	 ddl
mZmZ ddlmZ  eed	d
      Z G d de	e      Z G d de      Z G d dee      Z G d dee      Zy)    )settings)	Paginator)FormView)	FormMixin)MultipleObjectMixin   )FacetedSearchFormModelSearchForm)SearchQuerySet HAYSTACK_SEARCH_RESULTS_PER_PAGE   c                   T    e Zd ZdZdZdZeZdZe	Z
dZeZdZdZdZdZd	 Zd
 Zd Zd Zy)SearchMixina  
    A mixin that allows adding in Haystacks search functionality into
    another view class.

    This mixin exhibits similar end functionality as the base Haystack search
    view, but with some important distinctions oriented around greater
    compatibility with Django's built-in class based views and mixins.

    Normal flow:

        self.request = request

        self.form = self.build_form()
        self.query = self.get_query()
        self.results = self.get_results()

        return self.create_response()

    This mixin should:

        1. Make the form
        2. Get the queryset
        3. Return the paginated queryset

    zsearch/search.htmlTNr   pageformqc                 P    | j                   t               | _         | j                   S )N)querysetr   )selfs    M/var/www/horilla/myenv/lib/python3.12/site-packages/haystack/generic_views.pyget_querysetzSearchMixin.get_queryset4   s     == *,DM}}    c                    d| j                         i}| j                  j                  dk(  r'|j                  d| j                  j                  i       |j                  | j                         | j                  d       |S )zK
        Returns the keyword arguments for instantiating the form.
        initialGETdata)searchquerysetload_all)get_initialrequestmethodupdater   r   r   )r   kwargss     r   get_form_kwargszSearchMixin.get_form_kwargs9   sl     T--/0<<%'MM64<<#3#345#002N	
 r   c           	           | j                   di | j                  |d| j                         i}| j                  |      S )Nobject_list )get_context_data	form_namer   render_to_responser   r   contexts      r   form_invalidzSearchMixin.form_invalidE   sE    '$'' 
~~t]D4E4E4GH
 &&w//r   c           
          |j                         | _         | j                  di | j                  |d|j                  j                  | j                        d| j                  i}| j                  |      S )Nqueryr&   r'   )searchr   r(   r)   cleaned_datagetsearch_fieldr*   r+   s      r   
form_validzSearchMixin.form_validK   sl    '$'' 
**..t/@/@At}}
 &&w//r   )__name__
__module____qualname____doc__template_namer   r
   
form_classcontext_object_nameRESULTS_PER_PAGEpaginate_bypaginate_orphansr   paginator_class
page_kwargr)   r3   r&   r   r$   r-   r4   r'   r   r   r   r      sV    4 )MH J"KOJILK

0	0r   r   c                   B     e Zd ZdZeZdZdZ fdZ fdZ	 fdZ
 xZS )FacetedSearchMixinza
    A mixin that allows adding in a Haystack search functionality with search
    faceting.
    Nc                     t         |          }|j                  d| j                  j                  j                  d      i       |S )Nselected_facets)superr$   r"   r    r   getlist)r   r#   	__class__s     r   r$   z"FacetedSearchMixin.get_form_kwargsa   s=    (*($,,*:*:*B*BCT*UVWr   c                 |    t        |   di |}|j                  d| j                  j	                         i       |S )Nfacetsr'   )rE   r(   r"   r   facet_counts)r   r#   r,   rG   s      r   r(   z#FacetedSearchMixin.get_context_dataf   s8    '*4V4$--"<"<">?@r   c                     t         |          }| j                  D ]  }|j                  |      } | j                  r#| j                  D ]  } |j
                  di |} |S )Nr'   )rE   r   facet_fieldsfacetdate_facet_fields
date_facet)r   qsfieldrG   s      r   r   zFacetedSearchMixin.get_querysetk   sl    W!#&& 	!E%B	! !!// ,"R]]+U+, 	r   )r5   r6   r7   r8   r	   r:   rL   rN   r$   r(   r   __classcell__)rG   s   @r   rB   rB   W   s.    
 #JL

	 	r   rB   c                       e Zd ZdZd Zy)
SearchViewz:A view class for searching a Haystack managed search indexc                     | j                         }| j                  |      }|j                         r| j                  |      S | j	                  |      S )zT
        Handles GET requests and instantiates a blank version of the form.
        )get_form_classget_formis_validr4   r-   )r   r    argsr#   r:   r   s         r   r2   zSearchView.getz   sI     ((*
}}Z(==???4((  &&r   N)r5   r6   r7   r8   r2   r'   r   r   rT   rT   w   s
    D	'r   rT   c                       e Zd ZdZy)FacetedSearchViewzT
    A view class for searching a Haystack managed search index with
    facets
    N)r5   r6   r7   r8   r'   r   r   r[   r[      s    
 	r   r[   N)django.confr   django.core.paginatorr   django.views.genericr   django.views.generic.editr   django.views.generic.listr   formsr	   r
   r/   r   getattrr<   r   rB   rT   r[   r'   r   r   <module>rc      sf      + ) / 9 5 !8%GL G0%y G0T @'h '	*J 	r   