

_VT                 @   sm   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	 Gd d   d e	 j
  Z d S)	    )unicode_literals)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  t |   j   | |  _ d  S)N)superr   __init___CurrentSiteManager__field_name)self
field_name)	__class__ ?/tmp/pip-build-ghmbqnp_/Django/django/contrib/sites/managers.pyr	      s    zCurrentSiteManager.__init__c                s/   t  t |   j |   } | j |  j    | S)N)r   r   checkextend_check_field_name)r   kwargserrors)r   r   r   r      s    zCurrentSiteManager.checkc             C   s   |  j    } y |  j j j |  } Wn8 t k
 r_ t j d | d d  d |  d d g SYn Xt | t j	 t j
 f  s t j d |  j j j | f d d  d |  d d g Sg  S)Nz5CurrentSiteManager could not find a field named '%s'.Zhintobjidz
sites.E001zSCurrentSiteManager cannot use '%s.%s' as it is not a ForeignKey or ManyToManyField.z
sites.E002)_get_field_namemodel_meta	get_fieldr   r   Error
isinstancer   Z
ForeignKeyZManyToManyFieldZobject_name)r   r   fieldr   r   r   r      s"    

z$CurrentSiteManager._check_field_namec             C   sQ   |  j  sJ y |  j j j d  Wn t k
 r= d |  _  YqJ Xd |  _  n  |  j  S)z0 Return self.__field_name or 'site' or 'sites'. sitesites)r
   r   r   r   r   )r   r   r   r   r   4   s    	z"CurrentSiteManager._get_field_namec                s0   t  t |   j   j i t j |  j   d 6  S)NZ__id)r   r   get_querysetfilterr   ZSITE_IDr   )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)
__future__r   Zdjango.confr   Zdjango.corer   Zdjango.core.exceptionsr   Z	django.dbr   Managerr   r   r   r   r   <module>   s
   