
    g                         d dl mZ d dlmZmZ d dlmZ d dlmZ d dl	m
Z d dlmZmZmZ  G d de      Z G d	 d
ee      Z G d de      Z G d dee      Zy)    )ImproperlyConfigured)InvalidPage	Paginator)QuerySet)Http404)gettext)ContextMixinTemplateResponseMixinViewc                        e Zd ZdZdZdZdZdZdZdZ	e
ZdZdZd Zd Zd Zd	 Z	 dd
Zd Zd Zd Zdd fd
Z xZS )MultipleObjectMixinz0A mixin for views manipulating multiple objects.TNr   pagec                    | j                   -| j                   }t        |t              rf|j                         }nU| j                  %| j                  j
                  j                         }n$t        dd| j                  j                  iz        | j                         }|r"t        |t              r|f} |j                  | }|S )z
        Return the list of items for this view.

        The return value must be an iterable and may be an instance of
        `QuerySet` in which case `QuerySet` specific behavior will be enabled.
        zj%(cls)s is missing a QuerySet. Define %(cls)s.model, %(cls)s.queryset, or override %(cls)s.get_queryset().cls)queryset
isinstancer   allmodel_default_managerr   	__class____name__get_orderingstrorder_by)selfr   orderings      q/var/www/python.vincentserveurtest.ovh/public_html/venv/lib/python3.12/site-packages/django/views/generic/list.pyget_querysetz MultipleObjectMixin.get_queryset   s     ==$}}H(H-#<<>ZZ#zz22668H&*-2DNN4K4K,LM 
 $$&(C($;(x(((3H    c                     | j                   S )z<Return the field or fields to use for ordering the queryset.)r   r   s    r   r   z MultipleObjectMixin.get_ordering1   s    }}r   c                 R   | j                  ||| j                         | j                               }| j                  }| j                  j                  |      xs) | j                  j                  j                  |      xs d}	 t        |      }	 |j                  |      }|||j                  |j                         fS # t        $ r) |dk(  r|j                  }nt        t        d            Y aw xY w# t         $ r(}t        t        d      |t#        |      dz        d}~ww xY w)z!Paginate the queryset, if needed.orphansallow_empty_first_page   lastu:   Page is not “last”, nor can it be converted to an int.z+Invalid page (%(page_number)s): %(message)s)page_numbermessageN)get_paginatorget_paginate_orphansget_allow_empty
page_kwargkwargsgetrequestGETint
ValueError	num_pagesr   _r   object_listhas_other_pagesr   r   )r   r   	page_size	paginatorr-   r   r(   es           r   paginate_querysetz%MultipleObjectMixin.paginate_queryset5   s(   &&--/#'#7#7#9	 ' 
	 __
{{z*Sdll.>.>.B.B:.NSRS	d)K	>>+.DtT%5%5t7K7K7MNN  	v~'11RS  	  	?@"-#a&AB 	s*   C  .C5  /C21C25	D&>#D!!D&c                     | j                   S )zX
        Get the number of items to paginate by, or ``None`` for no pagination.
        )paginate_by)r   r   s     r   get_paginate_byz#MultipleObjectMixin.get_paginate_byQ   s     r   c                 0     | j                   ||f||d|S )z2Return an instance of the paginator for this view.r#   )paginator_class)r   r   per_pager$   r%   r.   s         r   r*   z!MultipleObjectMixin.get_paginatorW   s6     $t##
 #9	

 
 	
r   c                     | j                   S )zg
        Return the maximum number of orphans extend the last page by when
        paginating.
        )paginate_orphansr!   s    r   r+   z(MultipleObjectMixin.get_paginate_orphansc   s    
 $$$r   c                     | j                   S )z
        Return ``True`` if the view should display empty lists and ``False``
        if a 404 should be raised instead.
        )allow_emptyr!   s    r   r,   z#MultipleObjectMixin.get_allow_emptyj   s    
 r   c                     | j                   r| j                   S t        |d      r#d|j                  j                  j                  z  S y)z3Get the name of the item to be used in the context.r   z%s_listN)context_object_namehasattrr   _meta
model_name)r   r6   s     r   get_context_object_namez+MultipleObjectMixin.get_context_object_nameq   sA    ##+++['*{0066AAAAr   )r6   c                   ||n| j                   }| j                  |      }| j                  |      }|r| j                  ||      \  }}}}||||d}	nddd|d}	|||	|<   |	j	                  |       t        
|   di |	S )zGet the context for this view.N)r9   page_objis_paginatedr6   F )r6   r>   rK   r;   updatesuperget_context_data)r   r6   r.   r   r8   rG   r9   r   rN   contextr   s             r   rR   z$MultipleObjectMixin.get_context_dataz   s    "-"9;t?O?O((2	"::8D6:6L6L)73ItX| '  ,'	G "  %'	G *+3G'(vw'2'22r   )r   T)r   
__module____qualname____doc__rE   r   r   r=   rC   rG   r   r@   r-   r   r   r   r;   r>   r*   r+   r,   rK   rR   __classcell__r   s   @r   r   r   	   ss    :KHEKOJH68  EI

%  /3 3 3r   r   c                       e Zd ZdZd Zy)BaseListViewz-A base view for displaying a list of objects.c                    | j                         | _        | j                         }|s| j                  | j                        2t	        | j                  d      r| j                  j                          }n| j                   }|r-t        t        d      d| j                  j                  iz        | j                         }| j                  |      S )Nexistsu9   Empty list and “%(class_name)s.allow_empty” is False.
class_name)r   r6   r,   r>   rH   r\   r   r5   r   r   rR   render_to_response)r   r0   argsr.   rE   is_emptyrS   s          r   r/   zBaseListView.get   s    ,,.**, ##D$4$45Ag  (G  $//6688#///QR$dnn&=&=  '')&&w//r   N)r   rT   rU   rV   r/   rO   r   r   rZ   rZ      s
    70r   rZ   c                   &     e Zd ZdZdZ fdZ xZS )#MultipleObjectTemplateResponseMixinz9Mixin for responding with a template and list of objects._listc                 r   	 t         |          }t        | j                  d      rY| j                  j
                  j                  }|j                  |j                  d|j                  | j                  d       |S |s$t        dd| j                  j                  iz        |S # t        $ r g }Y w xY w)z
        Return a list of template names to be used for the request. Must return
        a list. May not be called if render_to_response is overridden.
        r   /z.htmlzg%(cls)s requires either a 'template_name' attribute or a get_queryset() method that returns a QuerySet.r   )rQ   get_template_namesr   rH   r6   r   rI   append	app_labelrJ   template_name_suffixr   r   )r   namesoptsr   s      r   rf   z6MultipleObjectTemplateResponseMixin.get_template_names   s    
	G.0E 4##W-##))//DLL>>4??D4M4MO  &F 4>>22  / $ 	 E	s   B( (B65B6)r   rT   rU   rV   ri   rf   rW   rX   s   @r   rb   rb      s    C" r   rb   c                       e Zd ZdZy)ListViewz
    Render some list of objects, set by `self.model` or `self.queryset`.
    `self.queryset` can actually be any iterable of items, not just a queryset.
    N)r   rT   rU   rV   rO   r   r   rm   rm      s    r   rm   N)django.core.exceptionsr   django.core.paginatorr   r   django.db.modelsr   django.httpr   django.utils.translationr   r5   django.views.generic.baser	   r
   r   r   rZ   rb   rm   rO   r   r   <module>rt      sU    7 8 %  1 O OJ3, J3Z0& 08#*? #L2L r   