
v^                 @   s]   d  d l  m Z d  d l m Z d  d l m Z d  d l m Z Gd d   d e j  Z	 d S)    )settings)checks)FieldDoesNotExist)modelsc                   sm   e  Z d  Z d Z d Z d   f d d  Z   f d d   Z d d	   Z d
 d   Z   f d d   Z	   S)CurrentSiteManagerzDUse this to limit objects to those associated with the current site.TNc                s   t    j   | |  _ d  S)N)super__init___CurrentSiteManager__field_name)self
field_name)	__class__ ?/tmp/pip-build-8lau8j11/django/django/contrib/sites/managers.pyr      s    zCurrentSiteManager.__init__c                s)   t    j |   } | j |  j    | S)N)r   checkextend_check_field_name)r
   kwargserrors)r   r   r   r      s    zCurrentSiteManager.checkc             C   s   |  j    } y |  j j j |  } Wn2 t k
 rY t j d | d |  d d g SYn X| j r t | t	 j
  r t j d |  j j j | f d |  d d g Sg  S)Nz5CurrentSiteManager could not find a field named '%s'.objidz
sites.E001zYCurrentSiteManager cannot use '%s.%s' as it is not a foreign key or a many-to-many field.z
sites.E002)_get_field_namemodel_meta	get_fieldr   r   ErrorZmany_to_many
isinstancer   Z
ForeignKeyZobject_name)r
   r   fieldr   r   r   r      s    

z$CurrentSiteManager._check_field_namec             C   sN   |  j  sG y |  j j j d  Wn t k
 r= d |  _  Yn
 Xd |  _  |  j  S)z0 Return self.__field_name or 'site' or 'sites'. sitesites)r	   r   r   r   r   )r
   r   r   r   r   /   s    		z"CurrentSiteManager._get_field_namec                s)   t    j   j |  j   d t j i   S)NZ__id)r   get_querysetfilterr   r   ZSITE_ID)r
   )r   r   r   r   ;   s    zCurrentSiteManager.get_queryset)
__name__
__module____qualname____doc__Zuse_in_migrationsr   r   r   r   r   r   r   )r   r   r      s   r   N)
Zdjango.confr   Zdjango.corer   Zdjango.core.exceptionsr   Z	django.dbr   Managerr   r   r   r   r   <module>   s   