
 X/W                 @   s^  d  d l  m Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l 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 d  d l m Z m Z m Z d  d	 l m Z d  d
 l m Z m Z m Z d  d l m Z m  Z  d  d l! m" Z" m# Z# d  d l$ m% Z% d  d l& m' Z' m( Z( m) Z) m* Z* d  d l+ m, Z, m- Z- d  d l. m/ Z/ d  d l0 m1 Z1 m2 Z2 m3 Z3 m4 Z4 d  d l5 m6 Z6 m7 Z7 m8 Z8 d  d l9 m: Z: d  d l; m< Z< d  d l= m> Z> d  d l? m@ ZA d d   d d d d d d d d  d! d" d# d$ d% d& d' d( d) d* d+ d, d- d. d/ d0 d1 d2 d3 d4 d5 d6 d7 f D ZB Gd8 d&   d& eC  ZD Gd9 d.   d.  ZE d: d; f g ZF d< d=   ZG d> d?   ZH e e3 Gd@ d'   d' e     ZI GdA d   d eI  ZJ GdB d   d eJ  ZK GdC d   d eI  ZL GdD d   d eI  ZM GdE d    d  eM  ZN GdF dG   dG eC  ZO GdH d!   d! eO eI  ZP GdI d"   d" eP  ZQ GdJ d#   d# eI  ZR GdK d$   d$ eI  ZS GdL d%   d% eM  ZT GdM d)   d) eI  ZU GdN d*   d* eI  ZV GdO d-   d- eI  ZW GdP d   d eW  ZX GdQ d,   d, eI  ZY GdR d+   d+ eI  ZZ GdS d/   d/ eI  Z[ GdT dU   dU eC  Z\ GdV d0   d0 e\ eW  Z] GdW d1   d1 e\ eW  Z^ GdX d2   d2 eM  Z_ GdY d3   d3 eW  Z` GdZ d4   d4 eI  Za Gd[ d5   d5 eO eI  Zb Gd\ d6   d6 eM  Zc Gd] d   d eI  Zd Gd^ d7   d7 eI  Ze d S)_    )unicode_literalsN)	b64decode	b64encode)total_ordering)forms)apps)settings)checks
exceptions
validators)FieldDoesNotExist)
connectionconnectionsrouter)DeferredAttributeRegisterLookupMixin)sixtimezone)DictWrapper)
parse_dateparse_datetimeparse_duration
parse_time)RemovedInDjango20Warningwarn_about_renamed_method)duration_string)force_bytes
force_textpython_2_unicode_compatible
smart_text)Promisecached_propertycurry)clean_ipv6_address)is_iterable)capfirst)ugettext_lazyc             C   s   g  |  ] } t  |   q S )str).0xr'   r'   N/home/ubuntu/projects/ifolica/build/django/django/db/models/fields/__init__.py
<listcomp>,   s   	 r,   	AutoFieldBLANK_CHOICE_DASHBigAutoFieldBigIntegerFieldBinaryFieldBooleanField	CharFieldCommaSeparatedIntegerField	DateFieldDateTimeFieldDecimalFieldDurationField
EmailFieldEmptyFieldr   FilePathField
FloatFieldGenericIPAddressFieldIPAddressFieldIntegerFieldNOT_PROVIDEDNullBooleanFieldPositiveIntegerFieldPositiveSmallIntegerField	SlugFieldSmallIntegerField	TextField	TimeFieldURLField	UUIDFieldc               @   s   e  Z d  Z d S)r:   N)__name__
__module____qualname__r'   r'   r'   r+   r:   8   s   c               @   s   e  Z d  Z d S)rA   N)rK   rL   rM   r'   r'   r'   r+   rA   <   s    z	---------c             C   s   t  j |  |  j j |  S)N)r   Z	get_model_meta	get_field)	app_label
model_name
field_namer'   r'   r+   _load_fieldD   s    rT   c             C   s   t    } |  | _ | S)N)r:   	__class__)Zof_clsnewr'   r'   r+   _emptyW   s    		rW   c               @   s  e  Z d  Z d Z d Z e e j  Z d Z	 d Z
 g  Z i e d  d 6e d  d 6e d	  d
 6e d  d 6e d  d 6Z d Z d Z d Z d Z d Z d Z d Z d Z d d   Z e e  Z d d d d d d d d d e d d d d d d d d d d g  d d d  Z d d   Z d d   Z d d   Z d d   Z e d d    Z d  d!   Z  d" d#   Z! d$ d%   Z" d& d'   Z# d( d)   Z$ d d* d+  Z% e& d, d-    Z' d. d/   Z( d0 d1   Z) d2 d3   Z* d4 d5   Z+ d6 d7   Z, d8 d9   Z- d: d;   Z. d< d=   Z/ d> d?   Z0 d@ dA   Z1 dB dC   Z2 e& dD dE    Z dF dG   Z3 dH dI   Z4 dJ dK   Z5 dL dM   Z6 dN dO   Z7 dP dQ   Z8 dR dS   Z9 dT dU   Z: dV dW   Z; e dX dY    Z< dZ d[   Z= d e d\ d]  Z> d^ d_   Z? d` da   Z@ db dc   ZA dd de   ZB df dg   ZC dh di   ZD dj dk   ZE d dl dm  ZF dn do   ZG dp dq   ZH dr ds   ZI d eJ d dt du  ZK eL d  dv dw eM  dx dy    ZN dz d{   ZO d| d}   ZP e eP  ZQ d~ d   ZR d d d d  ZS d d   ZT d S)r;   zBase class for all field typesTr      z&Value %(value)r is not a valid choice.invalid_choicezThis field cannot be null.nullzThis field cannot be blank.blankz8%(model_name)s with this %(field_label)s already exists.uniquezH%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s.unique_for_dateNFc             C   s   t  d  i |  j j d 6S)NzField of type: %(field_type)sZ
field_type)_rU   rK   )selfr'   r'   r+   _description   s    zField._descriptionrN   c             C   s  | |  _  | |  _ | |  _ | |  _ | | |  _ |  _ | | |  _ |  _ |	 |  _ |  j d  k	 |  _	 |
 |  _
 | |  _ | |  _ | |  _ | |  _ | |  _ t | t j  r t |  } n  | p g  |  _ | |  _ | |  _ | |  _ | p t j |  _ | |  _ | r%t j |  _ t j d 8_ n t j |  _ t j d 7_ | |  _ i  } x3 t  |  j! j"  D] } | j# t$ | d i    qbW| j# | pi   | |  _% | |  _& d  S)NrX   default_error_messages)'nameverbose_name_verbose_nameprimary_key
max_length_uniquer[   rZ   remote_fieldZis_relationdefaulteditable	serializer]   unique_for_monthunique_for_year
isinstancecollectionsIteratorlistchoices	help_textdb_index	db_columnr   DEFAULT_INDEX_TABLESPACEdb_tablespaceauto_createdr;   auto_creation_countercreation_counter_validatorsreversedrU   __mro__updategetattr_error_messageserror_messages)r_   rc   rb   re   rf   r\   r[   rZ   rt   relri   rj   rk   r]   rl   rm   rr   rs   ru   rw   rx   r   r   messagescr'   r'   r+   __init__   sD    																	zField.__init__c             C   s/   |  j  } | j j } d | | j j |  j f S)z, Return "app_label.model_label.field_name". z%s.%s.%s)modelrO   rQ   object_namerb   )r_   r   Zappr'   r'   r+   __str__   s    	zField.__str__c             C   sP   d |  j  j |  j  j f } t |  d d  } | d k	 rH d | | f Sd | S)zC
        Displays the module, class and name of the field.
        z%s.%srb   Nz<%s: %s>z<%s>)rU   rL   rK   r   )r_   pathrb   r'   r'   r+   __repr__   s
    zField.__repr__c             K   s   g  } | j  |  j    | j  |  j    | j  |  j    | j  |  j    | j  |  j |    | j  |  j    | S)N)extend_check_field_name_check_choices_check_db_index$_check_null_allowed_for_primary_keys_check_backend_specific_checks_check_deprecation_details)r_   kwargserrorsr'   r'   r+   check   s    zField.checkc             C   s   |  j  j d  r. t j d d |  d d g Sd |  j  k rY t j d d |  d d g S|  j  d	 k r t j d
 d |  d d g Sg  Sd S)z} Check if field name is valid, i.e. 1) does not end with an
        underscore, 2) does not contain "__" and 3) is not "pk". r^   z,Field names must not end with an underscore.objidzfields.E001__z"Field names must not contain "__".zfields.E002pkz<'pk' is a reserved word that cannot be used as a field name.zfields.E003N)rb   endswithr	   Error)r_   r'   r'   r+   r      s     


zField._check_field_namec             C   s   t  j d t d  |  j S)NzGUsage of field.rel has been deprecated. Use field.remote_field instead.   )warningswarnr   rh   )r_   r'   r'   r+   r      s    
z	Field.relc             C   s   |  j  r t |  j  t j  s. t |  j   rJ t j d d |  d d g St d d   |  j  D  r t j d d |  d d g Sg  Sn g  Sd  S)	Nz6'choices' must be an iterable (e.g., a list or tuple).r   r   zfields.E004c             s   s@   |  ]6 } t  | t j  p7 t |  p7 t |  d  k Vq d S)r   N)rn   r   string_typesr$   len)r)   choicer'   r'   r+   	<genexpr>  s   z'Field._check_choices.<locals>.<genexpr>zT'choices' must be an iterable containing (actual value, human readable name) tuples.zfields.E005)rr   rn   r   r   r$   r	   r   any)r_   r'   r'   r+   r      s    	

zField._check_choicesc             C   s3   |  j  d k r+ t j d d |  d d g Sg  Sd  S)NTFz''db_index' must be None, True or False.r   r   zfields.E006)NTF)rt   r	   r   )r_   r'   r'   r+   r     s    
zField._check_db_indexc             C   sI   |  j  rA |  j rA t j j rA t j d d d d |  d d g Sg  Sd  S)Nz%Primary keys must not have null=True.hintzASet null=False on the field, or remove primary_key=True argument.r   r   zfields.E007)re   rZ   r   features!interprets_empty_strings_as_nullsr	   r   )r_   r'   r'   r+   r   !  s    
z*Field._check_null_allowed_for_primary_keysc             K   s\   |  j  j j } xF t D]> } t j | | d |  j  j j r t | j j |  |  Sq Wg  S)NrR   )	r   rO   rQ   r   r   Zallow_migraterR   Z
validationZcheck_field)r_   r   rQ   dbr'   r'   r+   r   3  s
    !z$Field._check_backend_specific_checksc          
   C   s   |  j  d  k	 re t j |  j  j d d |  j j  d |  j  j d  d |  d |  j  j d d  g S|  j d  k	 r t j |  j j d d |  j j  d |  j j d  d |  d |  j j d d  g Sg  S)	Nmsgz@%s has been removed except for support in historical migrations.r   r   r   zfields.EXXXz%s has been deprecated.zfields.WXXX)system_check_removed_detailsr	   r   getrU   rK   system_check_deprecated_detailsWarning)r_   r'   r'   r+   r   :  s$    		z Field._check_deprecation_detailsc             C   sa   | d  k r |  } n  | |  j  j j k s6 | |  k rV d d l m } | | |  |  S|  j Sd  S)Nr   )Col)r   rO   db_tabledjango.db.models.expressionsr   
cached_col)r_   aliasZoutput_fieldr   r'   r'   r+   get_colV  s    	!zField.get_colc             C   s&   d d l  m } | |  j j j |   S)Nr   )r   )r   r   r   rO   r   )r_   r   r'   r'   r+   r   _  s    zField.cached_colc             C   s
   | | f S)z
        Custom format for select clauses. For example, GIS columns need to be
        selected as AsText(table.col) on MySQL as the table.col data can't be used
        by Django.
        r'   )r_   compilerZsqlparamsr'   r'   r+   select_formatd  s    zField.select_formatc       	      C   s=  i  } i d d 6d d 6d d 6d d 6d d 6d d 6d d	 6t  d
 6d d 6d d 6d d 6d d 6d d 6g  d 6d d 6d d 6t j d 6d d 6g  d 6d d 6} i d d 6d d 6d d 6d d 6} d d d h } x | j   D] \ } } t |  | j | |   } | d k r-t | t j  r-t	 |  } n  | | k rU| | k rn| | | <qnq | | k	 r | | | <q q Wd |  j
 j |  j
 j f } | j d  r| j d d  } n  | j d   r| j d  d  } n  | j d!  r| j d! d  } n  | j d"  r| j d" d  } n  t |  j d# d | g  | f S)$aM  
        Returns enough information to recreate the field as a 4-tuple:

         * The name of the field on the model, if contribute_to_class has been run
         * The import path of the field, including the class: django.db.models.IntegerField
           This should be the most portable version, so less specific may be better.
         * A list of positional arguments
         * A dict of keyword arguments

        Note that the positional or keyword arguments must contain values of the
        following types (including inner values of collection types):

         * None, bool, str, unicode, int, long, float, complex, set, frozenset, list, tuple, dict
         * UUID
         * datetime.datetime (naive), datetime.date
         * top-level classes, top-level functions - will be referenced by their full import path
         * Storage instances - these have their own deconstruct() method

        This is because the values here must be serialized into a text format
        (possibly new Python code, possibly JSON) and these are the only types
        with encoding handlers defined.

        There's no need to return the exact way the field was instantiated this time,
        just ensure that the resulting field is the same - prefer keyword arguments
        over positional ones, and omit parameters with their default values.
        Nrc   Fre   rf   r\   r[   rZ   rt   ri   Trj   rk   r]   rl   rm   rr   rN   rs   ru   rw   rx   r   r   rg   r   r{   rd   z%s.%szdjango.db.models.fields.relatedzdjango.db.modelszdjango.db.models.fields.fileszdjango.db.models.fields.proxyzdjango.db.models.fieldsZstrings_only)rA   r   rv   itemsr   r   rn   ro   Iterablerq   rU   rL   rK   
startswithreplacer   rb   )	r_   keywordsZ	possiblesZattr_overridesZequals_comparisonrb   ri   valuer   r'   r'   r+   deconstructl  sd    


zField.deconstructc             C   s(   |  j    \ } } } } |  j | |   S)z
        Uses deconstruct() to clone a new copy of this Field.
        Will not preserve any class attachments/attribute names.
        )r   rU   )r_   rb   r   argsr   r'   r'   r+   clone  s    zField.clonec             C   s#   t  | t  r |  j | j k St S)N)rn   r;   rz   NotImplemented)r_   otherr'   r'   r+   __eq__  s    zField.__eq__c             C   s#   t  | t  r |  j | j k  St S)N)rn   r;   rz   r   )r_   r   r'   r'   r+   __lt__  s    zField.__lt__c             C   s   t  |  j  S)N)hashrz   )r_   r'   r'   r+   __hash__  s    zField.__hash__c             C   sw   t  j  |   } |  j rc t  j  |  j  | _ t |  j d  rc |  j j |  k rc | | j _ qc n  | | t |   <| S)Nfield)copyrh   hasattrr   r   )r_   Zmemodictr   r'   r'   r+   __deepcopy__  s    	$zField.__deepcopy__c             C   s+   t    } |  j | _ |  j j   | _ | S)N)r:   rU   __dict__r   )r_   r   r'   r'   r+   __copy__  s    	zField.__copy__c             C   sM   t  |  d  s% t |  j f |  j f St |  j j j |  j j j |  j	 f f S)z
        Pickling should return the model._meta.fields instance of the field,
        not a new copy of that field. So, we use the app registry to load the
        model and then the field back.
        r   )
r   rW   rU   r   rT   r   rO   rQ   r   rb   )r_   r'   r'   r+   
__reduce__  s    zField.__reduce__c             C   s   |  j  r |  j   Sd S)a  
        Hook to generate new PK values on save. This method is called when
        saving instances with no primary key value set. If this method returns
        something else than None, then the returned value is used when saving
        the new instance.
        N)ri   get_default)r_   instancer'   r'   r+   get_pk_value_on_save  s    	
zField.get_pk_value_on_savec             C   s   | S)z
        Converts the input value into the expected Python data type, raising
        django.core.exceptions.ValidationError if the data can't be converted.
        Returns the converted value. Subclasses should override this.
        r'   )r_   r   r'   r'   r+   	to_python	  s    zField.to_pythonc             C   s   t  t j |  j |  j   S)z
        Some validators can't be created at field initialization time.
        This method provides a way to delay their creation until required.
        )rq   	itertoolschaindefault_validatorsr{   )r_   r'   r'   r+   r     s    zField.validatorsc             C   s   | |  j  k r d  Sg  } x |  j D] } y | |  Wq# t j k
 r } zL t | d  r | j |  j k r |  j | j | _ n  | j | j	  WYd  d  } ~ Xq# Xq# W| r t j |   n  d  S)Ncode)
empty_valuesr   r
   ValidationErrorr   r   r   messager   Z
error_list)r_   r   r   ver'   r'   r+   run_validators  s    !'zField.run_validatorsc             C   s+  |  j  s d S|  j r | |  j k r xf |  j D][ \ } } t | t t f  rz x7 | D] \ } } | | k rW d SqW Wq/ | | k r/ d Sq/ Wt j |  j d d d d i | d 6 n  | d k r |  j	 r t j |  j d d d  n  |  j
 r'| |  j k r't j |  j d d d  n  d S)z
        Validates value and throws ValidationError. Subclasses should override
        this to provide validation logic.
        NrY   r   r   r   rZ   r[   )rj   rr   r   rn   rq   tupler
   r   r   rZ   r[   )r_   r   model_instanceZ
option_keyZoption_valueZoptgroup_keyZoptgroup_valuer'   r'   r+   validate)  s$    	zField.validatec             C   s0   |  j  |  } |  j | |  |  j |  | S)z
        Convert the value's type and run validation. Validation errors
        from to_python and validate are propagated. The correct value is
        returned if no error is raised.
        )r   r   r   )r_   r   r   r'   r'   r+   cleanH  s    zField.cleanc             C   sQ   t  |  j | j j d  } y | j |  j   | SWn t k
 rL d SYn Xd S)z
        Return the database column check constraint for this field, for the
        provided connection. Works the same way as db_type() for the case that
        get_internal_type() does not map to a preexisting model field.
        qn_N)r   r   ops
quote_nameZdata_type_check_constraintsget_internal_typeKeyError)r_   r   datar'   r'   r+   db_checkS  s
    zField.db_checkc             C   sQ   t  |  j | j j d  } y | j |  j   | SWn t k
 rL d SYn Xd S)zk
        Return the database column data type for this field, for the provided
        connection.
        r   N)r   r   r   r   Z
data_typesr   r   )r_   r   r   r'   r'   r+   db_type_  s
    zField.db_typec             C   s   |  j  |  S)z
        Return the data type that a related field pointing to this field should
        use. For example, this method is called by ForeignKey and OneToOneField
        to determine its data type.
        )r   )r_   r   r'   r'   r+   rel_db_typey  s    zField.rel_db_typec             C   s0   |  j  |  } |  j |  } i | d 6| d 6S)z
        Extension of db_type(), providing a range of different return
        values (type, checks).
        This will look at db_type(), allowing custom model fields to override it.
        typer   )r   r   )r_   r   Ztype_stringZcheck_stringr'   r'   r+   db_parameters  s
    zField.db_parametersc             C   s   | j  j |  j    S)N)Zdata_types_suffixr   r   )r_   r   r'   r'   r+   db_type_suffix  s    zField.db_type_suffixc             C   s   t  |  d  r |  j g Sg  S)Nfrom_db_value)r   r   )r_   r   r'   r'   r+   get_db_converters  s    
zField.get_db_convertersc             C   s   |  j  p |  j S)N)rg   re   )r_   r'   r'   r+   r\     s    zField.uniquec             C   sv   |  j  s | |  _  n  |  j   \ |  _ |  _ |  j d  k	 |  _ |  j d  k rr |  j  rr |  j  j d d  |  _ n  d  S)Nr^    )rb   get_attname_columnattnamecolumnZconcreterc   r   )r_   rb   r'   r'   r+   set_attributes_from_name  s    	zField.set_attributes_from_namec             C   s   | t  k	 r+ t j d t d d | } n  |  j |  | |  _ | r` | j j |  d d n | j j |   |  j r t	 | |  j
 d  s t | |  j
 t |  j
 |   q n  |  j r t | d |  j t | j d |   n  d S)	z
        Register the field with the model class it belongs to.

        If private_only is True, a separate instance of this field will be
        created for every subclass of cls, even if cls is not an abstract
        model.
        z^The `virtual_only` argument of Field.contribute_to_class() has been renamed to `private_only`.
stacklevelr   ZprivateTNzget_%s_displayr   )rA   r   r   r   r   r   rO   Z	add_fieldr   r   r   setattrr   rr   rb   r"   Z_get_FIELD_display)r_   clsrb   Zprivate_onlyZvirtual_onlyr'   r'   r+   contribute_to_class  s     			%	zField.contribute_to_classc             C   s   i t  | |  j  |  j 6S)z
        Return a dict that when passed as kwargs to self.model.filter(), would
        yield all instances having the same value for this field as obj has.
        )r   r   rb   )r_   r   r'   r'   r+   get_filter_kwargs_for_object  s    z"Field.get_filter_kwargs_for_objectc             C   s   |  j  S)N)rb   )r_   r'   r'   r+   get_attname  s    zField.get_attnamec             C   s%   |  j    } |  j p | } | | f S)N)r   ru   )r_   r   r   r'   r'   r+   r     s    zField.get_attname_columnc             C   s   d |  j  S)Nz	_%s_cache)rb   )r_   r'   r'   r+   get_cache_name  s    zField.get_cache_namec             C   s
   |  j  j S)N)rU   rK   )r_   r'   r'   r+   r     s    zField.get_internal_typec             C   s   t  | |  j  S)z;
        Returns field's value just before saving.
        )r   r   )r_   r   addr'   r'   r+   pre_save  s    zField.pre_savec             C   s"   t  | t  r | j   } n  | S)zS
        Perform preliminary non-db specific value checks and conversions.
        )rn   r    Z_proxy____cast)r_   r   r'   r'   r+   get_prep_value  s    zField.get_prep_valuec             C   s   | s |  j  |  } n  | S)zReturns field's value prepared for interacting with the database
        backend.

        Used by the default implementations of get_db_prep_save().
        )r   )r_   r   r   preparedr'   r'   r+   get_db_prep_value  s    zField.get_db_prep_valuec             C   s   |  j  | d | d d S)zL
        Returns field's value prepared for saving into a database.
        r   r   F)r   )r_   r   r   r'   r'   r+   get_db_prep_save  s    zField.get_db_prep_savec             C   s   |  j  t k	 S)zN
        Returns a boolean of whether this field has a default value.
        )ri   rA   )r_   r'   r'   r+   has_default  s    zField.has_defaultc             C   sT   |  j    r, t |  j  r% |  j   S|  j S|  j sL |  j rP t j j rP d Sd S)z;
        Returns the default value for this field.
        NrN   )r   callableri   empty_strings_allowedrZ   r   r   r   )r_   r'   r'   r+   r     s    
 zField.get_defaultc                s&  d }   j  r t   j   n g  } | oD t | d d t t f  } | s} x- | D]" \ } } | d k rT d } PqT qT Wn  | r | r | n g  }	   j  r |	 | S  j j }
 | p   j   } t   j d  r   f d d	   |
 j j	 |  D } n d
 d	   |
 j j	 |  D } |	 | S)zmReturns choices with a default blank choices included, for use
        as SelectField choices for this field.Fr   rX   rN   NTget_related_fieldc                s7   g  |  ]- } t  |   j j   j  t |  f  q Sr'   )r   rh   r   r   r   )r)   r*   )r_   r'   r+   r,     s   	z%Field.get_choices.<locals>.<listcomp>c             S   s(   g  |  ] } | j    t |  f  q Sr'   )Z_get_pk_valr   )r)   r*   r'   r'   r+   r,     s   	)rN   N)
rr   rq   rn   r   rh   r   Zget_limit_choices_tor   Z_default_managerZcomplex_filter)r_   include_blankZblank_choiceZlimit_choices_toZblank_definedrr   Znamed_groupsr   r   Zfirst_choiceZ	rel_modellstr'   )r_   r+   get_choices  s,    #				zField.get_choices_get_val_from_objvalue_from_objectc             C   s*   | d  k	 r t  | |  j  S|  j   Sd  S)N)r   r   r   )r_   r   r'   r'   r+   r  $  s    zField._get_val_from_objc             C   s   t  |  j |   S)z
        Returns a string value of this field from the passed obj.
        This is used by the serialization framework.
        )r   r  )r_   r   r'   r'   r+   value_to_string.  s    zField.value_to_stringc             C   s\   g  } xO |  j  D]D \ } } t | t t f  rA | j |  q | j | | f  q W| S)z#Flattened version of choices tuple.)rr   rn   rq   r   r   append)r_   Zflatr   r   r'   r'   r+   _get_flatchoices5  s    zField._get_flatchoicesc             C   s   t  | |  j |  d  S)N)r   rb   )r_   r   r   r'   r'   r+   save_form_data@  s    zField.save_form_datac             K   sT  i |  j  d 6t |  j  d 6|  j d 6} |  j   rs t |  j  r` |  j | d <d | d <qs |  j   | d <n  |  j r%|  j  p |  j   p d | k } |  j	 d |  | d <|  j
 | d	 <|  j r d
 | d <n  | d
 k	 r | } n	 t j } x- t |  D] } | d k r| | =qqWn  | j |  | d
 k rJt j } n  | |   S)zP
        Returns a django.forms.Field instance for this database Field.
        requiredlabelrs   initialTshow_hidden_initialr  rr   coerceNempty_valuewidgetr   )
r  r  zchoiceszrequiredr  zlabelzinitialz	help_textzerror_messagesr  )r[   r%   rc   rs   r   r   ri   r   rr   r  r   rZ   r   ZTypedChoiceFieldrq   r~   r3   )r_   
form_classZchoices_form_classr   defaultsr  kr'   r'   r+   	formfieldC  s6    					 	zField.formfieldc             C   s   t  | |  j  S)zN
        Returns the value of this field in the given model instance.
        )r   r   )r_   r   r'   r'   r+   r  i  s    zField.value_from_object)UrK   rL   rM   __doc__r   rq   r   ZEMPTY_VALUESr   rz   ry   r   r^   ra   r   r   hiddenZmany_to_manyZmany_to_oneZone_to_manyZ
one_to_oneZrelated_modelr`   propertydescriptionrA   r   r   r   r   r   r   r   r   r   r   r   r   r!   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r\   r   r   r   r   r   r   r   r   r   r   r   r   r   r.   r  r   r   r  r  r  Zflatchoicesr	  r  r  r'   r'   r'   r+   r;   ]   s   			)

	X
		&c                   s   e  Z d  Z e d  Z d Z i e d  d 6Z   f d d   Z   f d d   Z d	 d
   Z	   f d d   Z
 d d   Z d d   Z d d   Z d d   Z d d d  Z   f d d   Z   f d d   Z d d   Z   S)r-   IntegerFz%'%(value)s' value must be an integer.invalidc                s'   d | d <t  t |   j | |   d  S)NTr[   )superr-   r   )r_   r   r   )rU   r'   r+   r   x  s    
zAutoField.__init__c                s/   t  t |   j |   } | j |  j    | S)N)r  r-   r   r   _check_primary_key)r_   r   r   )rU   r'   r+   r   |  s    zAutoField.checkc             C   s-   |  j  s% t j d d |  d d g Sg  Sd  S)Nz%AutoFields must set primary_key=True.r   r   zfields.E100)re   r	   r   )r_   r'   r'   r+   r    s    	
zAutoField._check_primary_keyc                sB   t  t |   j   \ } } } } | d =d | d <| | | | f S)Nr[   Tre   )r  r-   r   )r_   rb   r   r   r   )rU   r'   r+   r     s    !
zAutoField.deconstructc             C   s   d S)Nr-   r'   )r_   r'   r'   r+   r     s    zAutoField.get_internal_typec             C   sf   | d  k r | Sy t  |  SWnA t t f k
 ra t j |  j d d d d i | d 6 Yn Xd  S)Nr  r   r   r   )int	TypeError
ValueErrorr
   r   r   )r_   r   r'   r'   r+   r     s    zAutoField.to_pythonc             C   s   t    j d |  S)Nr   )r@   r   )r_   r   r'   r'   r+   r     s    zAutoField.rel_db_typec             C   s   d  S)Nr'   )r_   r   r   r'   r'   r+   r     s    zAutoField.validatec             C   s.   | s* |  j  |  } | j j |  } n  | S)N)r   r   Zvalidate_autopk_value)r_   r   r   r   r'   r'   r+   r     s    zAutoField.get_db_prep_valuec                s2   t  t |   j |  } | d  k r( d  St |  S)N)r  r-   r   r  )r_   r   )rU   r'   r+   r     s    zAutoField.get_prep_valuec                sQ   | j  j s t d   t t |   j | | |  d | j  _ |  | j  _ d  S)Nz+A model can't have more than one AutoField.T)rO   Zhas_auto_fieldAssertionErrorr  r-   r   Z
auto_field)r_   r   rb   r   )rU   r'   r+   r     s
    	zAutoField.contribute_to_classc             K   s   d  S)Nr'   )r_   r   r'   r'   r+   r    s    zAutoField.formfield)rK   rL   rM   r^   r  r   ra   r   r   r  r   r   r   r   r   r   r   r   r  r'   r'   )rU   r+   r-   p  s    c               @   s4   e  Z d  Z e d  Z d d   Z d d   Z d S)r/   zBig (8 byte) integerc             C   s   d S)Nr/   r'   )r_   r'   r'   r+   r     s    zBigAutoField.get_internal_typec             C   s   t    j d |  S)Nr   )r0   r   )r_   r   r'   r'   r+   r     s    zBigAutoField.rel_db_typeN)rK   rL   rM   r^   r  r   r   r'   r'   r'   r+   r/     s   c                   s   e  Z d  Z d Z i e d  d 6Z e d  Z   f d d   Z   f d d   Z d	 d
   Z	   f d d   Z
 d d   Z d d   Z   f d d   Z   f d d   Z   S)r2   Fz/'%(value)s' value must be either True or False.r  zBoolean (Either True or False)c                s'   d | d <t  t |   j | |   d  S)NTr[   )r  r2   r   )r_   r   r   )rU   r'   r+   r     s    
zBooleanField.__init__c                s2   t  t |   j |   } | j |  j |    | S)N)r  r2   r   r   _check_null)r_   r   r   )rU   r'   r+   r     s    zBooleanField.checkc             K   s<   t  |  d d  r4 t j d d d d |  d d g Sg  Sd  S)	NrZ   Fz(BooleanFields do not accept null values.r   zUse a NullBooleanField instead.r   r   zfields.E110)r   r	   r   )r_   r   r'   r'   r+   r"    s    
zBooleanField._check_nullc                s8   t  t |   j   \ } } } } | d =| | | | f S)Nr[   )r  r2   r   )r_   rb   r   r   r   )rU   r'   r+   r     s    !zBooleanField.deconstructc             C   s   d S)Nr2   r'   )r_   r'   r'   r+   r     s    zBooleanField.get_internal_typec             C   sc   | d k r t  |  S| d k r& d S| d k r6 d St j |  j d	 d
 d	 d i | d 6 d  S)NTFtTrue1fFalse0r  r   r   r   )TF)r#  zTruer%  )r&  zFalser(  )boolr
   r   r   )r_   r   r'   r'   r+   r     s    
zBooleanField.to_pythonc                s5   t  t |   j |  } | d  k r( d  S|  j |  S)N)r  r2   r   r   )r_   r   )rU   r'   r+   r     s    zBooleanField.get_prep_valuec                sq   |  j  r> |  j   p d | k } i |  j d |  d 6} n i t j d 6} | j |  t t |   j |   S)Nr  r  rr   r  )rr   r   r  r   r2   r~   r  r  )r_   r   r  r  )rU   r'   r+   r    s    	zBooleanField.formfield)rK   rL   rM   r   r^   ra   r  r   r   r"  r   r   r   r   r  r'   r'   )rU   r+   r2     s   c                   s   e  Z d  Z e d  Z   f d d   Z   f d d   Z d d   Z d d	   Z d
 d   Z	   f d d   Z
   f d d   Z   S)r3   zString (up to %(max_length)s)c                s9   t  t |   j | |   |  j j t j |  j   d  S)N)r  r3   r   r   r  MaxLengthValidatorrf   )r_   r   r   )rU   r'   r+   r     s    zCharField.__init__c                s2   t  t |   j |   } | j |  j |    | S)N)r  r3   r   r   _check_max_length_attribute)r_   r   r   )rU   r'   r+   r     s    zCharField.checkc             K   st   |  j  d  k r+ t j d d |  d d g St |  j  t j  sP |  j  d k rl t j d d |  d d g Sg  Sd  S)Nz0CharFields must define a 'max_length' attribute.r   r   zfields.E120r   z('max_length' must be a positive integer.zfields.E121)rf   r	   r   rn   r   integer_types)r_   r   r'   r'   r+   r+    s    
%
z%CharField._check_max_length_attributec             C   s   d S)Nr3   r'   )r_   r'   r'   r+   r   /  s    zCharField.get_internal_typec             C   s,   t  | t j  s | d  k r" | St |  S)N)rn   r   r   r   )r_   r   r'   r'   r+   r   2  s    zCharField.to_pythonc                s%   t  t |   j |  } |  j |  S)N)r  r3   r   r   )r_   r   )rU   r'   r+   r   7  s    zCharField.get_prep_valuec                s3   i |  j  d 6} | j |  t t |   j |   S)Nrf   )rf   r~   r  r3   r  )r_   r   r  )rU   r'   r+   r  ;  s    zCharField.formfield)rK   rL   rM   r^   r  r   r   r+  r   r   r   r  r'   r'   )rU   r+   r3     s   c                   sU   e  Z d  Z e j g Z e d  Z i d d 6d d 6d d 6Z   f d d	   Z	   S)
r4   zComma-separated integerszCommaSeparatedIntegerField has been deprecated. Support for it (except in historical migrations) will be removed in Django 2.0.r   zJUse CharField(validators=[validate_comma_separated_integer_list]) instead.r   zfields.W901r   c                s=   i i t  d  d 6d 6} | j |  t t |   j |   S)Nz&Enter only digits separated by commas.r  r   )r^   r~   r  r4   r  )r_   r   r  )rU   r'   r+   r  S  s
    z$CommaSeparatedIntegerField.formfield)
rK   rL   rM   r   Z%validate_comma_separated_integer_listr   r^   r  r   r  r'   r'   )rU   r+   r4   D  s   
c                   s:   e  Z d  Z   f d d   Z d d   Z d d   Z   S)DateTimeCheckMixinc                sB   t  t |   j |   } | j |  j    | j |  j    | S)N)r  r-  r   r   !_check_mutually_exclusive_options_check_fix_default_value)r_   r   r   )rU   r'   r+   r   _  s    zDateTimeCheckMixin.checkc             C   sg   |  j  |  j |  j   g } d d   | D j d  } | d k r_ t j d d |  d d g Sg  Sd  S)	Nc             S   s   g  |  ] } | d k  q S)NF)NFr'   )r)   optionr'   r'   r+   r,   j  s   	 zHDateTimeCheckMixin._check_mutually_exclusive_options.<locals>.<listcomp>TrX   zqThe options auto_now, auto_now_add, and default are mutually exclusive. Only one of these options may be present.r   r   zfields.E160)auto_now_addauto_nowr   countr	   r   )r_   Zmutually_exclusive_optionsZenabled_optionsr'   r'   r+   r.  e  s    
z4DateTimeCheckMixin._check_mutually_exclusive_optionsc             C   s   g  S)Nr'   )r_   r'   r'   r+   r/  x  s    z+DateTimeCheckMixin._check_fix_default_value)rK   rL   rM   r   r.  r/  r'   r'   )rU   r+   r-  ]  s   r-  c                   s   e  Z d  Z d Z i e d  d 6e d  d 6Z e d  Z d d d d   f d d	  Z d
 d   Z   f d d   Z	 d d   Z
 d d   Z   f d d   Z   f d d   Z   f d d   Z d d d  Z d d   Z   f d d   Z   S)r5   FzN'%(value)s' value has an invalid date format. It must be in YYYY-MM-DD format.r  zP'%(value)s' value has the correct format (YYYY-MM-DD) but it is an invalid date.invalid_datezDate (without time)Nc                sV   | | |  _  |  _ | s | r6 d | d <d | d <n  t t |   j | | |  d  S)NFrj   Tr[   )r2  r1  r  r5   r   )r_   rc   rb   r2  r1  r   )rU   r'   r+   r     s
    
zDateField.__init__c             C   s!  |  j    s g  St j   } t j |  sC t j | t j  } n  |  j } t | t j  r t j |  s t j | t j  } n  | j	   } n t | t j	  r n g  St j
 d d  } | | j	   } | | j	   } | | k o | k n rt j d d d d |  d d g Sg  S)	z
        Adds a warning to the checks framework stating, that using an actual
        date or datetime value is probably wrong; it's only being evaluated on
        server start-up.

        For details see ticket #21905
        daysrX   zFixed default value provided.r   zIt seems you set a fixed date / time / datetime value as default for this field. This may not be what you want. If you want to have the current date as default, use `django.utils.timezone.now`r   r   zfields.W161)r   r   nowis_naive
make_naiveutcri   rn   datetimedate	timedeltar	   r   )r_   r6  r   offsetlowerupperr'   r'   r+   r/    s.    	
z"DateField._check_fix_default_valuec                s   t  t |   j   \ } } } } |  j r7 d | d <n  |  j rM d | d <n  |  j s_ |  j rp | d =| d =n  | | | | f S)NTr2  r1  rj   r[   )r  r5   r   r2  r1  )r_   rb   r   r   r   )rU   r'   r+   r     s    !		
zDateField.deconstructc             C   s   d S)Nr5   r'   )r_   r'   r'   r+   r     s    zDateField.get_internal_typec             C   s  | d  k r | St  | t j  re t j r[ t j |  r[ t j   } t j | |  } n  | j   St  | t j  r{ | Sy  t	 |  } | d  k	 r | SWn; t
 k
 r t j |  j d d d d i | d 6 Yn Xt j |  j d d d d i | d 6 d  S)Nr4  r   r   r   r  )rn   r:  r   USE_TZr   is_awareget_default_timezoner8  r;  r   r   r
   r   r   )r_   r   default_timezoneparsedr'   r'   r+   r     s,    
zDateField.to_pythonc                s[   |  j  s |  j r> | r> t j j   } t | |  j |  | St t |   j	 | |  Sd  S)N)
r2  r1  r:  r;  todayr   r   r  r5   r   )r_   r   r   r   )rU   r'   r+   r     s
    zDateField.pre_savec          	      s   t  t |   j | | |  |  j s t | d |  j t | j d |  d d  t | d |  j t | j d |  d d  n  d  S)Nzget_next_by_%sr   Zis_nextTzget_previous_by_%sF)r  r5   r   rZ   r   rb   r"   Z_get_next_or_previous_by_FIELD)r_   r   rb   r   )rU   r'   r+   r     s    	zDateField.contribute_to_classc                s%   t  t |   j |  } |  j |  S)N)r  r5   r   r   )r_   r   )rU   r'   r+   r     s    zDateField.get_prep_valuec             C   s(   | s |  j  |  } n  | j j |  S)N)r   r   Zadapt_datefield_value)r_   r   r   r   r'   r'   r+   r     s    zDateField.get_db_prep_valuec             C   s)   |  j  |  } | d  k r d S| j   S)NrN   )r  	isoformat)r_   r   valr'   r'   r+   r    s    zDateField.value_to_stringc                s3   i t  j d 6} | j |  t t |   j |   S)Nr  )r   r5   r~   r  r  )r_   r   r  )rU   r'   r+   r    s    zDateField.formfield)rK   rL   rM   r   r^   ra   r  r   r/  r   r   r   r   r   r   r   r  r  r'   r'   )rU   r+   r5   |  s"   	+c                   s   e  Z d  Z d Z i e d  d 6e d  d 6e d  d 6Z e d  Z d	 d
   Z d d   Z d d   Z	   f d d   Z
   f d d   Z d d d  Z d d   Z   f d d   Z   S)r6   Fza'%(value)s' value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ] format.r  zP'%(value)s' value has the correct format (YYYY-MM-DD) but it is an invalid date.r4  zm'%(value)s' value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ]) but it is an invalid date/time.invalid_datetimezDate (with time)c             C   s  |  j    s g  St j   } t j |  sC t j | t j  } n  |  j } t | t j  r t j	 d d  } | | } | | } t j
 |  rGt j | t j  } qGn t | t j  rCt j	 d d  } | | } t j | j | j | j  } | | } t j | j | j | j  } t j | j | j | j  } n g  S| | k o^| k n rt j d d d d |  d d g Sg  S)	z
        Adds a warning to the checks framework stating, that using an actual
        date or datetime value is probably wrong; it's only being evaluated on
        server start-up.

        For details see ticket #21905
        seconds
   zFixed default value provided.r   zIt seems you set a fixed date / time / datetime value as default for this field. This may not be what you want. If you want to have the current date as default, use `django.utils.timezone.now`r   r   zfields.W161)r   r   r6  r7  r8  r9  ri   rn   r:  r<  rA  r;  yearmonthdayr	   r   )r_   r6  r   second_offsetr>  r?  r'   r'   r+   r/    s6    	



!
z&DateTimeField._check_fix_default_valuec             C   s   d S)Nr6   r'   )r_   r'   r'   r+   r   J  s    zDateTimeField.get_internal_typec             C   s  | d  k r | St  | t j  r& | St  | t j  r t j | j | j | j  } t j r t j	 d |  j
 j |  j | f t  t j   } t j | |  } n  | Sy  t |  } | d  k	 r | SWn; t k
 rt j |  j d d d d i | d 6 Yn Xy8 t |  } | d  k	 r?t j | j | j | j  SWn; t k
 r}t j |  j d d d d i | d 6 Yn Xt j |  j d d d d i | d 6 d  S)NzUDateTimeField %s.%s received a naive datetime (%s) while time zone support is active.rH  r   r   r   r4  r  )rn   r:  r;  rK  rL  rM  r   r@  r   r   r   rK   rb   RuntimeWarningr   rB  
make_awarer   r   r
   r   r   r   )r_   r   rC  rD  r'   r'   r+   r   M  sF    		 zDateTimeField.to_pythonc                sX   |  j  s |  j r; | r; t j   } t | |  j |  | St t |   j | |  Sd  S)N)	r2  r1  r   r6  r   r   r  r6   r   )r_   r   r   r   )rU   r'   r+   r   }  s
    zDateTimeField.pre_savec                s   t  t |   j |  } |  j |  } | d  k	 r t j r t j |  r y d |  j j	 |  j
 f } Wn t k
 r d } Yn Xt j d | | f t  t j   } t j | |  } n  | S)Nz%s.%sz	(unbound)zRDateTimeField %s received a naive datetime (%s) while time zone support is active.)r  r6   r   r   r   r@  r   r7  r   rK   rb   AttributeErrorr   r   rO  rB  rP  )r_   r   rb   rC  )rU   r'   r+   r     s    $	
zDateTimeField.get_prep_valuec             C   s(   | s |  j  |  } n  | j j |  S)N)r   r   Zadapt_datetimefield_value)r_   r   r   r   r'   r'   r+   r     s    zDateTimeField.get_db_prep_valuec             C   s)   |  j  |  } | d  k r d S| j   S)NrN   )r  rF  )r_   r   rG  r'   r'   r+   r    s    zDateTimeField.value_to_stringc                s3   i t  j d 6} | j |  t t |   j |   S)Nr  )r   r6   r~   r  r  )r_   r   r  )rU   r'   r+   r    s    zDateTimeField.formfield)rK   rL   rM   r   r^   ra   r  r/  r   r   r   r   r   r  r  r'   r'   )rU   r+   r6     s   .0c                   s  e  Z d  Z d Z i e d  d 6Z e d  Z d d d d   f d d  Z   f d d	   Z d
 d   Z	 d d   Z
 d d   Z e   f d d    Z   f d d   Z d d   Z d d   Z d d   Z d d   Z d d   Z   f d d   Z   f d  d!   Z   S)"r7   Fz+'%(value)s' value must be a decimal number.r  zDecimal numberNc                s3   | | |  _  |  _ t t |   j | | |  d  S)N)
max_digitsdecimal_placesr  r7   r   )r_   rc   rb   rR  rS  r   )rU   r'   r+   r     s    zDecimalField.__init__c                sg   t  t |   j |   } |  j   } | j |  j    | sV | j |  j |    n | j |  | S)N)r  r7   r   _check_decimal_placesr   _check_max_digits$_check_decimal_places_and_max_digits)r_   r   r   Zdigits_errors)rU   r'   r+   r     s    zDecimalField.checkc             C   s   y+ t  |  j  } | d k  r* t    n  Wn[ t k
 r[ t j d d |  d d g SYn2 t k
 r t j d d |  d d g SYn Xg  Sd  S)Nr   z7DecimalFields must define a 'decimal_places' attribute.r   r   zfields.E130z0'decimal_places' must be a non-negative integer.zfields.E131)r  rS  r   r  r	   r   )r_   rS  r'   r'   r+   rT    s    z"DecimalField._check_decimal_placesc             C   s   y+ t  |  j  } | d k r* t    n  Wn[ t k
 r[ t j d d |  d d g SYn2 t k
 r t j d d |  d d g SYn Xg  Sd  S)Nr   z3DecimalFields must define a 'max_digits' attribute.r   r   zfields.E132z('max_digits' must be a positive integer.zfields.E133)r  rR  r   r  r	   r   )r_   rR  r'   r'   r+   rU    s    zDecimalField._check_max_digitsc             K   s>   t  |  j  t  |  j  k r: t j d d |  d d g Sg  S)Nz:'max_digits' must be greater or equal to 'decimal_places'.r   r   zfields.E134)r  rS  rR  r	   r   )r_   r   r'   r'   r+   rV    s    
z1DecimalField._check_decimal_places_and_max_digitsc                s)   t  t |   j t j |  j |  j  g S)N)r  r7   r   ZDecimalValidatorrR  rS  )r_   )rU   r'   r+   r     s    zDecimalField.validatorsc                so   t  t |   j   \ } } } } |  j d  k	 r@ |  j | d <n  |  j d  k	 r_ |  j | d <n  | | | | f S)NrR  rS  )r  r7   r   rR  rS  )r_   rb   r   r   r   )rU   r'   r+   r     s    !zDecimalField.deconstructc             C   s   d S)Nr7   r'   )r_   r'   r'   r+   r     s    zDecimalField.get_internal_typec             C   sf   | d  k r | Sy t  j |  SWn> t  j k
 ra t j |  j d d d d i | d 6 Yn Xd  S)Nr  r   r   r   )decimalZDecimalZInvalidOperationr
   r   r   )r_   r   r'   r'   r+   r     s    zDecimalField.to_pythonc             C   s'   t  | t j  r | S|  j |  Sd  S)N)rn   r   r   format_number)r_   r   r'   r'   r+   _format  s    zDecimalField._formatc             C   s)   d d l  m } | j | |  j |  j  S)zp
        Formats a number into a string with the requisite number of digits and
        decimal places.
        r   )utils)Zdjango.db.backendsrZ  rX  rR  rS  )r_   r   rZ  r'   r'   r+   rX     s    zDecimalField.format_numberc             C   s%   | j  j |  j |  |  j |  j  S)N)r   Zadapt_decimalfield_valuer   rR  rS  )r_   r   r   r'   r'   r+   r   .  s    zDecimalField.get_db_prep_savec                s%   t  t |   j |  } |  j |  S)N)r  r7   r   r   )r_   r   )rU   r'   r+   r   1  s    zDecimalField.get_prep_valuec                sG   i |  j  d 6|  j d 6t j d 6} | j |  t t |   j |   S)NrR  rS  r  )rR  rS  r   r7   r~   r  r  )r_   r   r  )rU   r'   r+   r  5  s    

zDecimalField.formfield)rK   rL   rM   r   r^   ra   r  r   r   rT  rU  rV  r!   r   r   r   r   rY  rX  r   r   r  r'   r'   )rU   r+   r7     s&   	c                   s   e  Z d  Z d Z d Z i e d  d 6Z e d  Z d d   Z d d	   Z	 d d
 d  Z
   f d d   Z d d   Z   f d d   Z   S)r8   zStores timedelta objects.

    Uses interval on postgres, INVERAL DAY TO SECOND on Oracle, and bigint of
    microseconds on other databases.
    FzY'%(value)s' value has an invalid format. It must be in [DD] [HH:[MM:]]ss[.uuuuuu] format.r  ZDurationc             C   s   d S)Nr8   r'   )r_   r'   r'   r+   r   L  s    zDurationField.get_internal_typec             C   s   | d  k r | St  | t j  r& | Sy t |  } Wn t k
 rJ Yn X| d  k	 r[ | St j |  j d d d d i | d 6 d  S)Nr  r   r   r   )rn   r:  r<  r   r   r
   r   r   )r_   r   rD  r'   r'   r+   r   O  s    zDurationField.to_pythonc             C   s:   | j  j r | S| d  k r  d  St t | j   d   S)Ni@B )r   has_native_duration_fieldr  roundtotal_seconds)r_   r   r   r   r'   r'   r+   r   b  s
    zDurationField.get_db_prep_valuec                sB   g  } | j  j s( | j | j j  n  | t t |   j |  S)N)r   r[  r  r   Zconvert_durationfield_valuer  r8   r   )r_   r   Z
converters)rU   r'   r+   r   j  s    zDurationField.get_db_convertersc             C   s)   |  j  |  } | d  k r d St |  S)NrN   )r  r   )r_   r   rG  r'   r'   r+   r  p  s    zDurationField.value_to_stringc                s3   i t  j d 6} | j |  t t |   j |   S)Nr  )r   r8   r~   r  r  )r_   r   r  )rU   r'   r+   r  t  s    zDurationField.formfield)rK   rL   rM   r  r   r^   ra   r  r   r   r   r   r  r  r'   r'   )rU   r+   r8   ?  s   c                   s^   e  Z d  Z e j g Z e d  Z   f d d   Z   f d d   Z	   f d d   Z
   S)r9   zEmail addressc                s3   | j  d d  | d <t t |   j | |   d  S)Nrf      )r   r  r9   r   )r_   r   r   )rU   r'   r+   r     s    zEmailField.__init__c                s1   t  t |   j   \ } } } } | | | | f S)N)r  r9   r   )r_   rb   r   r   r   )rU   r'   r+   r     s    !zEmailField.deconstructc                s3   i t  j d 6} | j |  t t |   j |   S)Nr  )r   r9   r~   r  r  )r_   r   r  )rU   r'   r+   r    s    zEmailField.formfield)rK   rL   rM   r   Zvalidate_emailr   r^   r  r   r   r  r'   r'   )rU   r+   r9   |  s
   c            
       s   e  Z d  Z e d  Z d d d d d d d   f d d  Z   f d d	   Z d
 d   Z   f d d   Z   f d d   Z	   f d d   Z
 d d   Z   S)r<   z	File pathNrN   FTc       	         sf   | | | |  _  |  _ |  _ | | |  _ |  _ | j d d  | d <t t |   j | | |  d  S)Nrf   d   )	r   match	recursiveallow_filesallow_foldersr   r  r<   r   )	r_   rc   rb   r   r`  ra  rb  rc  r   )rU   r'   r+   r     s    zFilePathField.__init__c                s2   t  t |   j |   } | j |  j |    | S)N)r  r<   r   r    _check_allowing_files_or_folders)r_   r   r   )rU   r'   r+   r     s    zFilePathField.checkc             K   s4   |  j  r0 |  j r0 t j d d |  d d g Sg  S)NzMFilePathFields must have either 'allow_files' or 'allow_folders' set to True.r   r   zfields.E140)rb  rc  r	   r   )r_   r   r'   r'   r+   rd    s    
z.FilePathField._check_allowing_files_or_foldersc                s   t  t |   j   \ } } } } |  j d k r@ |  j | d <n  |  j d  k	 r_ |  j | d <n  |  j d k	 r~ |  j | d <n  |  j d k	 r |  j | d <n  |  j d k	 r |  j | d <n  | j d	  d
 k r | d	 =n  | | | | f S)NrN   r   r`  Fra  Trb  rc  rf   r_  )	r  r<   r   r   r`  ra  rb  rc  r   )r_   rb   r   r   r   )rU   r'   r+   r     s    !
zFilePathField.deconstructc                s5   t  t |   j |  } | d  k r( d  St j |  S)N)r  r<   r   r   	text_type)r_   r   )rU   r'   r+   r     s    zFilePathField.get_prep_valuec                se   i |  j  d 6|  j d 6|  j d 6t j d 6|  j d 6|  j d 6} | j |  t t |   j	 |   S)Nr   r`  ra  r  rb  rc  )
r   r`  ra  r   r<   rb  rc  r~   r  r  )r_   r   r  )rU   r'   r+   r    s    




zFilePathField.formfieldc             C   s   d S)Nr<   r'   )r_   r'   r'   r+   r     s    zFilePathField.get_internal_type)rK   rL   rM   r^   r  r   r   rd  r   r   r  r   r'   r'   )rU   r+   r<     s   c                   sq   e  Z d  Z d Z i e d  d 6Z e d  Z   f d d   Z d d   Z d	 d
   Z	   f d d   Z
   S)r=   Fz"'%(value)s' value must be a float.r  zFloating point numberc                s2   t  t |   j |  } | d  k r( d  St |  S)N)r  r=   r   float)r_   r   )rU   r'   r+   r     s    zFloatField.get_prep_valuec             C   s   d S)Nr=   r'   )r_   r'   r'   r+   r     s    zFloatField.get_internal_typec             C   sf   | d  k r | Sy t  |  SWnA t t f k
 ra t j |  j d d d d i | d 6 Yn Xd  S)Nr  r   r   r   )rf  r  r   r
   r   r   )r_   r   r'   r'   r+   r     s    zFloatField.to_pythonc                s3   i t  j d 6} | j |  t t |   j |   S)Nr  )r   r=   r~   r  r  )r_   r   r  )rU   r'   r+   r    s    zFloatField.formfield)rK   rL   rM   r   r^   ra   r  r   r   r   r  r'   r'   )rU   r+   r=     s   c                   s   e  Z d  Z d Z i e d  d 6Z e d  Z   f d d   Z d d   Z e	   f d	 d
    Z
   f d d   Z d d   Z d d   Z   f d d   Z   S)r@   Fz%'%(value)s' value must be an integer.r  r  c                s/   t  t |   j |   } | j |  j    | S)N)r  r@   r   r   _check_max_length_warning)r_   r   r   )rU   r'   r+   r     s    zIntegerField.checkc             C   s5   |  j  d  k	 r1 t j d d d d |  d d g Sg  S)Nz3'max_length' is ignored when used with IntegerFieldr   zRemove 'max_length' from fieldr   r   zfields.W122)rf   r	   r   )r_   r'   r'   r+   rg    s    
z&IntegerField._check_max_length_warningc                s   t  t |   j } |  j   } t j j |  \ } } | d  k	 r xL | D]+ } t | t j  rI | j	 | k rI PqI qI W| j
 t j |   n  | d  k	 r xL | D]+ } t | t j  r | j	 | k r Pq q W| j
 t j |   n  | S)N)r  r@   r   r   r   r   Zinteger_field_rangern   ZMinValueValidatorZlimit_valuer  ZMaxValueValidator)r_   Zvalidators_Zinternal_type	min_value	max_valueZ	validator)rU   r'   r+   r     s    !!zIntegerField.validatorsc                s2   t  t |   j |  } | d  k r( d  St |  S)N)r  r@   r   r  )r_   r   )rU   r'   r+   r   $  s    zIntegerField.get_prep_valuec             C   s   d S)Nr@   r'   )r_   r'   r'   r+   r   *  s    zIntegerField.get_internal_typec             C   sf   | d  k r | Sy t  |  SWnA t t f k
 ra t j |  j d d d d i | d 6 Yn Xd  S)Nr  r   r   r   )r  r  r   r
   r   r   )r_   r   r'   r'   r+   r   -  s    zIntegerField.to_pythonc                s3   i t  j d 6} | j |  t t |   j |   S)Nr  )r   r@   r~   r  r  )r_   r   r  )rU   r'   r+   r  9  s    zIntegerField.formfield)rK   rL   rM   r   r^   ra   r  r   rg  r!   r   r   r   r   r  r'   r'   )rU   r+   r@     s   c                   sF   e  Z d  Z d Z e d  Z d Z d d   Z   f d d   Z   S)r0   FzBig (8 byte) integerl    c             C   s   d S)Nr0   r'   )r_   r'   r'   r+   r   D  s    z!BigIntegerField.get_internal_typec                sB   i t  j d d 6t  j d 6} | j |  t t  |   j |   S)NrX   rh  ri  )r0   
MAX_BIGINTr~   r  r  )r_   r   r  )rU   r'   r+   r  G  s    zBigIntegerField.formfield)	rK   rL   rM   r   r^   r  rj  r   r  r'   r'   )rU   r+   r0   ?  s
   c                   s   e  Z d  Z d Z e d  Z i d d 6d d 6d d 6Z   f d	 d
   Z   f d d   Z   f d d   Z	 d d   Z
   S)r?   FzIPv4 addresszLIPAddressField has been removed except for support in historical migrations.r   z"Use GenericIPAddressField instead.r   zfields.E900r   c                s'   d | d <t  t |   j | |   d  S)N   rf   )r  r?   r   )r_   r   r   )rU   r'   r+   r   Z  s    
zIPAddressField.__init__c                s8   t  t |   j   \ } } } } | d =| | | | f S)Nrf   )r  r?   r   )r_   rb   r   r   r   )rU   r'   r+   r   ^  s    !zIPAddressField.deconstructc                s5   t  t |   j |  } | d  k r( d  St j |  S)N)r  r?   r   r   re  )r_   r   )rU   r'   r+   r   c  s    zIPAddressField.get_prep_valuec             C   s   d S)Nr?   r'   )r_   r'   r'   r+   r   i  s    z IPAddressField.get_internal_type)rK   rL   rM   r   r^   r  r   r   r   r   r   r'   r'   )rU   r+   r?   N  s   
c                   s   e  Z d  Z d Z e d  Z i  Z d d d d   f d d  Z   f d d   Z d	 d
   Z	   f d d   Z
 d d   Z d d   Z d d d  Z   f d d   Z   f d d   Z   S)r>   Fz
IP addressNbothc                sg   | |  _  | |  _ t j | |  \ |  _ } | |  j d <d | d <t t |   j | | | |  d  S)Nr  '   rf   )	unpack_ipv4protocolr   Zip_address_validatorsr   ra   r  r>   r   )r_   rc   rb   ro  rn  r   r   Zinvalid_error_message)rU   r'   r+   r   r  s    		
zGenericIPAddressField.__init__c                s2   t  t |   j |   } | j |  j |    | S)N)r  r>   r   r   _check_blank_and_null_values)r_   r   r   )rU   r'   r+   r   }  s    zGenericIPAddressField.checkc             K   sE   t  |  d d  rA t  |  d d  rA t j d d |  d d g Sg  S)NrZ   Fr[   zaGenericIPAddressFields cannot have blank=True if null=False, as blank values are stored as nulls.r   r   zfields.E150)r   r	   r   )r_   r   r'   r'   r+   rp    s    %
z2GenericIPAddressField._check_blank_and_null_valuesc                s   t  t |   j   \ } } } } |  j d k	 r@ |  j | d <n  |  j d k r_ |  j | d <n  | j d  d k r~ | d =n  | | | | f S)NFrn  rl  ro  rf   rm  )r  r>   r   rn  ro  r   )r_   rb   r   r   r   )rU   r'   r+   r     s    !
z!GenericIPAddressField.deconstructc             C   s   d S)Nr>   r'   )r_   r'   r'   r+   r     s    z'GenericIPAddressField.get_internal_typec             C   sg   | d  k r d  St  | t j  s1 t |  } n  | j   } d | k rc t | |  j |  j d  S| S)N:r  )rn   r   r   r   stripr#   rn  r   )r_   r   r'   r'   r+   r     s    zGenericIPAddressField.to_pythonc             C   s(   | s |  j  |  } n  | j j |  S)N)r   r   Zadapt_ipaddressfield_value)r_   r   r   r   r'   r'   r+   r     s    z'GenericIPAddressField.get_db_prep_valuec                sv   t  t |   j |  } | d  k r( d  S| ri d | k ri y t | |  j  SWqi t j k
 re Yqi Xn  t j |  S)Nrq  )	r  r>   r   r#   rn  r
   r   r   re  )r_   r   )rU   r'   r+   r     s    z$GenericIPAddressField.get_prep_valuec                s=   i |  j  d 6t j d 6} | j |  t t |   j |   S)Nro  r  )ro  r   r>   r~   r  r  )r_   r   r  )rU   r'   r+   r    s
    
zGenericIPAddressField.formfield)rK   rL   rM   r   r^   r  ra   r   r   rp  r   r   r   r   r   r  r'   r'   )rU   r+   r>   m  s   	


c                   s   e  Z d  Z d Z i e d  d 6Z e d  Z   f d d   Z   f d d   Z d	 d
   Z	 d d   Z
   f d d   Z   f d d   Z   S)rB   Fz5'%(value)s' value must be either None, True or False.r  z$Boolean (Either True, False or None)c                s1   d | d <d | d <t  t |   j | |   d  S)NTrZ   r[   )r  rB   r   )r_   r   r   )rU   r'   r+   r     s    

zNullBooleanField.__init__c                s?   t  t |   j   \ } } } } | d =| d =| | | | f S)NrZ   r[   )r  rB   r   )r_   rb   r   r   r   )rU   r'   r+   r     s    !zNullBooleanField.deconstructc             C   s   d S)NrB   r'   )r_   r'   r'   r+   r     s    z"NullBooleanField.get_internal_typec             C   s   | d  k r d  S| d k r& t  |  S| d k r6 d  S| d k rF d S| d k rV d St j |  j d
 d d
 d i | d 6 d  S)NTFNoner#  r$  r%  r&  r'  r(  r  r   r   r   )TF)zNone)r#  zTruer%  )r&  zFalser(  )r)  r
   r   r   )r_   r   r'   r'   r+   r     s    
zNullBooleanField.to_pythonc                s5   t  t |   j |  } | d  k r( d  S|  j |  S)N)r  rB   r   r   )r_   r   )rU   r'   r+   r     s    zNullBooleanField.get_prep_valuec                sX   i t  j d 6|  j d 6t |  j  d 6|  j d 6} | j |  t t |   j |   S)Nr  r
  r  rs   )	r   rB   r[   r%   rc   rs   r~   r  r  )r_   r   r  )rU   r'   r+   r    s    
zNullBooleanField.formfield)rK   rL   rM   r   r^   ra   r  r   r   r   r   r   r  r'   r'   )rU   r+   rB     s   c               @   s   e  Z d  Z d d   Z d S)PositiveIntegerRelDbTypeMixinc             C   s0   | j  j r |  j |  St   j d |  Sd S)a  
        Return the data type that a related field pointing to this field should
        use. In most cases, a foreign key pointing to a positive integer
        primary key will have an integer column data type but some databases
        (e.g. MySQL) have an unsigned integer type. In that case
        (related_fields_match_type=True), the primary key should return its
        db_type.
        r   N)r   Zrelated_fields_match_typer   r@   )r_   r   r'   r'   r+   r     s    	z)PositiveIntegerRelDbTypeMixin.rel_db_typeN)rK   rL   rM   r   r'   r'   r'   r+   rt    s   rt  c                   s:   e  Z d  Z e d  Z d d   Z   f d d   Z   S)rC   zPositive integerc             C   s   d S)NrC   r'   )r_   r'   r'   r+   r     s    z&PositiveIntegerField.get_internal_typec                s0   i d d 6} | j  |  t t |   j |   S)Nr   rh  )r~   r  rC   r  )r_   r   r  )rU   r'   r+   r    s    zPositiveIntegerField.formfield)rK   rL   rM   r^   r  r   r  r'   r'   )rU   r+   rC     s   c                   s:   e  Z d  Z e d  Z d d   Z   f d d   Z   S)rD   zPositive small integerc             C   s   d S)NrD   r'   )r_   r'   r'   r+   r     s    z+PositiveSmallIntegerField.get_internal_typec                s0   i d d 6} | j  |  t t |   j |   S)Nr   rh  )r~   r  rD   r  )r_   r   r  )rU   r'   r+   r    s    z#PositiveSmallIntegerField.formfield)rK   rL   rM   r^   r  r   r  r'   r'   )rU   r+   rD     s   c                   sj   e  Z d  Z e j g Z e d  Z   f d d   Z   f d d   Z	 d d   Z
   f d d	   Z   S)
rE   zSlug (up to %(max_length)s)c                s|   | j  d d  | d <d | k r/ d | d <n  | j d d  |  _ |  j r_ t j g |  _ n  t t |   j | |   d  S)Nrf   2   rt   Tallow_unicodeF)	r   poprv  r   Zvalidate_unicode_slugr   r  rE   r   )r_   r   r   )rU   r'   r+   r   !  s    	zSlugField.__init__c                s   t  t |   j   \ } } } } | j d  d k r@ | d =n  |  j d k r\ d | d <n | d =|  j d k	 r |  j | d <n  | | | | f S)Nrf   ru  Frt   rv  )r  rE   r   r   rt   rv  )r_   rb   r   r   r   )rU   r'   r+   r   +  s    !
zSlugField.deconstructc             C   s   d S)NrE   r'   )r_   r'   r'   r+   r   7  s    zSlugField.get_internal_typec                s=   i t  j d 6|  j d 6} | j |  t t |   j |   S)Nr  rv  )r   rE   rv  r~   r  r  )r_   r   r  )rU   r'   r+   r  :  s    zSlugField.formfield)rK   rL   rM   r   Zvalidate_slugr   r^   r  r   r   r   r  r'   r'   )rU   r+   rE     s   
c               @   s(   e  Z d  Z e d  Z d d   Z d S)rF   zSmall integerc             C   s   d S)NrF   r'   )r_   r'   r'   r+   r   C  s    z#SmallIntegerField.get_internal_typeN)rK   rL   rM   r^   r  r   r'   r'   r'   r+   rF   @  s   c                   sX   e  Z d  Z e d  Z d d   Z d d   Z   f d d   Z   f d d	   Z   S)
rG   ZTextc             C   s   d S)NrG   r'   )r_   r'   r'   r+   r   J  s    zTextField.get_internal_typec             C   s,   t  | t j  s | d  k r" | St |  S)N)rn   r   r   r   )r_   r   r'   r'   r+   r   M  s    zTextField.to_pythonc                s%   t  t |   j |  } |  j |  S)N)r  rG   r   r   )r_   r   )rU   r'   r+   r   R  s    zTextField.get_prep_valuec                s=   i |  j  d 6t j d 6} | j |  t t |   j |   S)Nrf   r  )rf   r   ZTextarear~   r  rG   r  )r_   r   r  )rU   r'   r+   r  V  s    zTextField.formfield)	rK   rL   rM   r^   r  r   r   r   r  r'   r'   )rU   r+   rG   G  s
   c                   s   e  Z d  Z d Z i e d  d 6e d  d 6Z e d  Z d d d d   f d d	  Z d
 d   Z   f d d   Z	 d d   Z
 d d   Z   f d d   Z   f d d   Z d d d  Z d d   Z   f d d   Z   S)rH   FzR'%(value)s' value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] format.r  zY'%(value)s' value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an invalid time.invalid_timeZTimeNc                sV   | | |  _  |  _ | s | r6 d | d <d | d <n  t t |   j | | |  d  S)NFrj   Tr[   )r2  r1  r  rH   r   )r_   rc   rb   r2  r1  r   )rU   r'   r+   r   i  s
    
zTimeField.__init__c             C   sw  |  j    s g  St j   } t j |  sC t j | t j  } n  |  j } t | t j  r t j	 d d  } | | } | | } t j
 |  r5t j | t j  } q5n t | t j  r1t j	 d d  } | | } | | } t j j | j   |  } t j
 |  r5t j | t j  j   } q5n g  S| | k oL| k n rst j d d d d |  d d g Sg  S)	z
        Adds a warning to the checks framework stating, that using an actual
        time or datetime value is probably wrong; it's only being evaluated on
        server start-up.

        For details see ticket #21905
        rI  rJ  zFixed default value provided.r   zIt seems you set a fixed date / time / datetime value as default for this field. This may not be what you want. If you want to have the current date as default, use `django.utils.timezone.now`r   r   zfields.W161)r   r   r6  r7  r8  r9  ri   rn   r:  r<  rA  timecombiner;  r	   r   )r_   r6  r   rN  r>  r?  r'   r'   r+   r/  q  s6    	



!
z"TimeField._check_fix_default_valuec                s   t  t |   j   \ } } } } |  j d k	 r@ |  j | d <n  |  j d k	 r_ |  j | d <n  |  j sq |  j r | d =| d =n  | | | | f S)NFr2  r1  r[   rj   )r  rH   r   r2  r1  )r_   rb   r   r   r   )rU   r'   r+   r     s    !
zTimeField.deconstructc             C   s   d S)NrH   r'   )r_   r'   r'   r+   r     s    zTimeField.get_internal_typec             C   s   | d  k r d  St  | t j  r& | St  | t j  rB | j   Sy  t |  } | d  k	 ra | SWn; t k
 r t j |  j d d d d i | d 6 Yn Xt j |  j d d d d i | d 6 d  S)Nrx  r   r   r   r  )rn   r:  ry  r   r   r
   r   r   )r_   r   rD  r'   r'   r+   r     s&    
zTimeField.to_pythonc                sa   |  j  s |  j rD | rD t j j   j   } t | |  j |  | St t |   j	 | |  Sd  S)N)
r2  r1  r:  r6  ry  r   r   r  rH   r   )r_   r   r   r   )rU   r'   r+   r     s
    zTimeField.pre_savec                s%   t  t |   j |  } |  j |  S)N)r  rH   r   r   )r_   r   )rU   r'   r+   r     s    zTimeField.get_prep_valuec             C   s(   | s |  j  |  } n  | j j |  S)N)r   r   Zadapt_timefield_value)r_   r   r   r   r'   r'   r+   r     s    zTimeField.get_db_prep_valuec             C   s)   |  j  |  } | d  k r d S| j   S)NrN   )r  rF  )r_   r   rG  r'   r'   r+   r    s    zTimeField.value_to_stringc                s3   i t  j d 6} | j |  t t |   j |   S)Nr  )r   rH   r~   r  r  )r_   r   r  )rU   r'   r+   r    s    zTimeField.formfield)rK   rL   rM   r   r^   ra   r  r   r/  r   r   r   r   r   r   r  r  r'   r'   )rU   r+   rH   _  s    	.c                   sg   e  Z d  Z e j   g Z e d  Z d d   f d d  Z   f d d   Z	   f d d   Z
   S)	rI   URLNc                s6   | j  d d  | d <t t |   j | | |  d  S)Nrf      )r   r  rI   r   )r_   rc   rb   r   )rU   r'   r+   r     s    zURLField.__init__c                sP   t  t |   j   \ } } } } | j d  d k r@ | d =n  | | | | f S)Nrf   r|  )r  rI   r   r   )r_   rb   r   r   r   )rU   r'   r+   r     s    !
zURLField.deconstructc                s3   i t  j d 6} | j |  t t |   j |   S)Nr  )r   rI   r~   r  r  )r_   r   r  )rU   r'   r+   r    s    zURLField.formfield)rK   rL   rM   r   ZURLValidatorr   r^   r  r   r   r  r'   r'   )rU   r+   rI     s
   c                   s   e  Z d  Z e d  Z d d g Z   f d d   Z   f d d   Z d d	   Z d
 d   Z	   f d d   Z
 d   f d d  Z d d   Z d d   Z   S)r1   zRaw binary dataN    c                sU   d | d <t  t |   j | |   |  j d  k	 rQ |  j j t j |  j   n  d  S)NFrj   )r  r1   r   rf   r   r  r*  )r_   r   r   )rU   r'   r+   r   	  s    
zBinaryField.__init__c                s8   t  t |   j   \ } } } } | d =| | | | f S)Nrj   )r  r1   r   )r_   rb   r   r   r   )rU   r'   r+   r   	  s    !zBinaryField.deconstructc             C   s   d S)Nr1   r'   )r_   r'   r'   r+   r   	  s    zBinaryField.get_internal_typec             C   s   | j  j |  S)N)r   Zbinary_placeholder_sql)r_   r   r   r   r'   r'   r+   get_placeholder	  s    zBinaryField.get_placeholderc                sL   |  j    r# t |  j  r# |  j St t |   j   } | d k rH d S| S)NrN   r}  )r   r   ri   r  r1   r   )r_   ri   )rU   r'   r+   r   	  s    zBinaryField.get_defaultFc                s>   t  t |   j | | |  } | d  k	 r: | j j |  S| S)N)r  r1   r   ZDatabaseBinary)r_   r   r   r   )rU   r'   r+   r   	  s    zBinaryField.get_db_prep_valuec             C   s"   t  t |  j |    j d  S)z#Binary data is serialized as base64ascii)r   r   r  decode)r_   r   r'   r'   r+   r   	  s    zBinaryField.value_to_stringc             C   s/   t  | t j  r+ t j t t |    S| S)N)rn   r   re  
memoryviewr   r   )r_   r   r'   r'   r+   r   $	  s    zBinaryField.to_python)rK   rL   rM   r^   r  r   r   r   r   r~  r   r   r  r   r'   r'   )rU   r+   r1     s   c                   s   e  Z d  Z i e d  d 6Z d Z d Z d   f d d  Z   f d d	   Z d
 d   Z	 d d d  Z
 d d   Z   f d d   Z   S)rJ   z '%(value)s' is not a valid UUID.r  zUniversally unique identifierFNc                s'   d | d <t  t |   j | |  d  S)N    rf   )r  rJ   r   )r_   rc   r   )rU   r'   r+   r   2	  s    
zUUIDField.__init__c                s8   t  t |   j   \ } } } } | d =| | | | f S)Nrf   )r  rJ   r   )r_   rb   r   r   r   )rU   r'   r+   r   6	  s    !zUUIDField.deconstructc             C   s   d S)NrJ   r'   )r_   r'   r'   r+   r   ;	  s    zUUIDField.get_internal_typec             C   s   | d  k r d  St  | t j  sk y t j |  } Wqk t k
 rg t |  j d i | d 6  Yqk Xn  | j j r{ | S| j S)Nr  r   )	rn   uuidUUIDrQ  r  r   r   Zhas_native_uuid_fieldhex)r_   r   r   r   r'   r'   r+   r   >	  s    &zUUIDField.get_db_prep_valuec             C   so   | rk t  | t j  rk y t j |  SWqk t k
 rg t j |  j d d d d i | d 6 Yqk Xn  | S)Nr  r   r   r   )rn   r  r  r   r
   r   r   )r_   r   r'   r'   r+   r   K	  s    zUUIDField.to_pythonc                s3   i t  j d 6} | j |  t t |   j |   S)Nr  )r   rJ   r~   r  r  )r_   r   r  )rU   r'   r+   r  W	  s    zUUIDField.formfield)rK   rL   rM   r^   ra   r  r   r   r   r   r   r   r  r'   r'   )rU   r+   rJ   +	  s   )f
__future__r   ro   r   r:  rW  r   r  r   base64r   r   	functoolsr   Zdjangor   Zdjango.appsr   Zdjango.confr   Zdjango.corer	   r
   r   Zdjango.core.exceptionsr   Z	django.dbr   r   r   Zdjango.db.models.query_utilsr   r   Zdjango.utilsr   r   Zdjango.utils.datastructuresr   Zdjango.utils.dateparser   r   r   r   Zdjango.utils.deprecationr   r   Zdjango.utils.durationr   Zdjango.utils.encodingr   r   r   r   Zdjango.utils.functionalr    r!   r"   Zdjango.utils.ipv6r#   Zdjango.utils.itercompatr$   Zdjango.utils.textr%   Zdjango.utils.translationr&   r^   __all__objectr:   rA   r.   rT   rW   r;   r-   r/   r2   r3   r4   r-  r5   r6   r7   r8   r9   r<   r=   r@   r0   r?   r>   rB   rt  rC   rD   rE   rF   rG   rH   rI   r1   rJ   r'   r'   r'   r+   <module>   s   ""		   O
F5=@"HQ6#.