
    k"g                       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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mZmZ 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&m'Z'm(Z(m)Z) d dl*m+Z+ d dl,m-Z-m.Z.m/Z/m0Z0 d dl1m2Z2m3Z3 d dl4m5Z5m6Z6 d dl7m8Z8 d dl9m:Z: d dl;m<Z= g dZ> G d d      Z? G d d      Z@dgZAd ZBd ZCd ZDe G d d e              ZE G d! d"eE      ZF G d# d$eE      ZG G d% d&eG      ZHd' ZId( ZJ G d) d*      ZK G d+ d,eKeE      ZL G d- d.eL      ZM G d/ d0eE      ZN G d1 d2eE      ZO G d3 d4eG      ZP G d5 d6eE      ZQ G d7 d8eE      ZR G d9 d:eE      ZS G d; d<eS      ZT G d= d>eS      ZU G d? d@eE      ZV G dA dBeE      ZW G dC dDeF      ZX G dE dF      ZY G dG dHeYeT      ZZ G dI dJeYeS      Z[ G dK dLeYeU      Z\ G dM dNeG      Z] G dO dPeE      Z^ G dQ dReKeE      Z_ G dS dTeG      Z` G dU dVeE      Za G dW dXeE      Zb G dY dZ      Zc G d[ d\ed      Ze G d] d^eceSee_      Zf G d` daeceT      Zg G db dceceU      Zhy)d    N)	b64decode	b64encode)Iterable)partialmethodtotal_ordering)forms)apps)settings)checks
exceptions
validators)
connectionconnectionsrouter)
LOOKUP_SEP)DeferredAttributeRegisterLookupMixinNotSupportedError)timezone)BlankChoiceIteratorCallableChoiceIteratorflatten_choicesnormalize_choices)DictWrapper)
parse_dateparse_datetimeparse_duration
parse_time)duration_microsecondsduration_string)Promisecached_property)clean_ipv6_address)capfirst)gettext_lazy) 	AutoFieldBLANK_CHOICE_DASHBigAutoFieldBigIntegerFieldBinaryFieldBooleanField	CharFieldCommaSeparatedIntegerField	DateFieldDateTimeFieldDecimalFieldDurationField
EmailFieldEmptyFieldFilePathField
FloatFieldGenericIPAddressFieldIPAddressFieldIntegerFieldNOT_PROVIDEDNullBooleanFieldPositiveBigIntegerFieldPositiveIntegerFieldPositiveSmallIntegerField	SlugFieldSmallAutoFieldSmallIntegerField	TextField	TimeFieldURLField	UUIDFieldc                       e Zd Zy)r4   N__name__
__module____qualname__     Y/var/www/html/djangosite/lib/python3.12/site-packages/django/db/models/fields/__init__.pyr4   r4   K       rM   r4   c                       e Zd Zy)r;   NrH   rL   rM   rN   r;   r;   O   rO   rM   r;   ) z	---------c                 `    t        j                  | |      j                  j                  |      S N)r	   	get_model_meta	get_field)	app_label
model_name
field_names      rN   _load_fieldrZ   X   s$    >>)Z066@@LLrM   c                 (    t               }| |_        |S rS   )r4   	__class__)of_clsnews     rN   _emptyr_   l   s    
'CCMJrM   c                       y rS   rL   rL   rM   rN   return_Nonera   r   s    rM   c                   @    e Zd ZdZdZ eej                        ZdZ	dZ
g Z ed       ed       ed       ed       ed	      d
ZdZdZdZdZdZdZdZdZdZdZeZ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dddefdZ fdZd Z d Z!d Z"e#d        Z$d Z%dSdZ&d Z'dSdZ(d Z)dSdZ*d Z+d Z,dSdZ-ed         Z.e.j^                  d!        Z.e0d"        Z1d# Z2d$ Z3d% Z4d& Z5d' Z6d( Z7d) Z8d* Z9d+ Z:d, Z;d- Z<e0d.        Z=e0d/        Zd0 Z>d1 Z?d2 Z@d3 ZAd4 ZBd5 ZCd6 ZDd7 ZEd8 ZFd9 ZGd: ZHe0d;        ZIed<        ZJed=        ZKd> ZLdTd?ZMd@ ZNdA ZOdB ZPdC ZQdD ZRdE ZSdTdFZTdG ZUdH ZVdI ZWe0dJ        ZXe0dK        ZYdeZddfdLZ[dM Z\edN        Z]dO Z^dUdPZ_dQ Z`dR Za xZbS )Vr5   zBase class for all field typesTr   z&Value %(value)r is not a valid choice.zThis field cannot be null.zThis field cannot be blank.z8%(model_name)s with this %(field_label)s already exists.zH%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s.)invalid_choicenullblankuniqueunique_for_dateN)rf   choices	db_columneditableerror_messages	help_textlimit_choices_to	on_deleterelated_namerelated_query_namer   verbose_nameFc                 J    t        d      d| j                  j                  iz  S )NzField of type: %(field_type)s
field_type)_r\   rI   selfs    rN   _descriptionzField._description   s)    01$..115
 
 	
rM   rQ   rL   c                 \   || _         || _        || _        || _        ||c| _        | _        ||c| _        | _        |	| _        | j                  d u| _	        |
| _
        || _        || _        || _        || _        || _        || _        || _        || _        || _        || _        || _        || _        || _        |r/t0        j2                  | _        t0        xj2                  dz  c_        n.t0        j4                  | _        t0        xj4                  dz  c_        t7        |      | _        || _        y )N   )namerr   _verbose_nameprimary_key
max_length_uniquerf   re   remote_fieldis_relationdefault
db_defaultrk   	serializerh   unique_for_monthunique_for_yearri   rm   db_indexrj   
db_comment_db_tablespaceauto_createdr5   auto_creation_countercreation_counterlist_validators_error_messages)rw   rr   r{   r}   r~   rg   rf   re   r   relr   rk   r   rh   r   r   ri   rm   rj   db_tablespacer   r   rl   r   r   s                            rN   __init__zField.__init__   s   6 	()&(2F% %t
DI,,D8$ ". 0." "$+( $)$?$?D!''1,'$)$:$:D!""a'"
+-rM   c                     t        | d      st        | 	         S | j                  }|j                  j
                  d| j                  S )zb
        Return "app_label.model_label.field_name" for fields attached to
        models.
        model.)hasattrsuper__str__r   rU   labelr{   )rw   r   r\   s     rN   r   zField.__str__   s>    
 tW%7?$$

++++TYY77rM   c                     | j                   j                  d| j                   j                  }t        | dd      }|	d|d|dS d|z  S )z1Display the module, class, and name of the field.r   r{   N<z: >z<%s>)r\   rJ   rK   getattr)rw   pathr{   s      rN   __repr__zField.__repr__  sI    ..33T^^5P5PQtVT*!%t,,}rM   c                 2   g | j                         | j                          | j                  di || j                          | j                  di || j                          | j                  di || j                         | j                         S NrL   )	_check_field_name_check_choices_check_db_default_check_db_index_check_db_comment$_check_null_allowed_for_primary_keys_check_backend_specific_checks_check_validators_check_deprecation_detailsrw   kwargss     rN   checkzField.check
  s    

##%

  "

 $T##-f-

 !!#	


 $T##-f-

 668

 1T00:6:

 ##%

 ,,.

 
	
rM   c                 >   | j                   g S | j                   j                  d      rt        j                  d| d      gS t        | j                   v r t        j                  dt        z  | d      gS | j                   dk(  rt        j                  d| d	      gS g 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".
        ru   z,Field names must not end with an underscore.zfields.E001objidz"Field names must not contain "%s".zfields.E002pkz<'pk' is a reserved word that cannot be used as a field name.zfields.E003)r{   endswithr   Errorr   rv   s    rN   r   zField._check_field_name  s    
 99I99c"B$  499$8:E$  YY$R$  IrM   c                 T    t        |t        t        f      xs t        |t               S rS   )
isinstancestrr"   r   )clsvalues     rN   _choices_is_valuezField._choices_is_value9  s"    %#w0S
5(8S4SSrM   c                 2     j                   sg S t         j                   t              rt         j                   t              rt	        j
                  d d      gS d} j                   D ]T  }	 |\  }}	 t         fd|D              s np j                  |rt        |gd |D              }t        |t              sT n:  j                  +| j                  kD  rt	        j
                  d|z   d      gS g S t	        j
                  d	 d
      gS # t        t        f$ r Y  +w xY w# t        t        f$ r] ||}} j                  |      r j                  |      sY  g j                  %t        |t              rt        |t        |            }Y w xY w)NzV'choices' must be a mapping (e.g. a dictionary) or an iterable (e.g. a list or tuple).zfields.E004r   r   c              3   l   K   | ]+  \  }}j                  |      xr j                  |       - y wrS   )r   ).0r   
human_namerw   s      rN   	<genexpr>z'Field._check_choices.<locals>.<genexpr>T  s;      )z **51Xd6L6LZ6XXs   14c              3   X   K   | ]"  \  }}t        |t              rt        |       $ y wrS   )r   r   len)r   r   ru   s      rN   r   z'Field._check_choices.<locals>.<genexpr>]  s*      $,E1#-eS#9 !$E
s   (*zP'max_length' is too small to fit the longest value in 'choices' (%d characters).zfields.E009z'choices' must be a mapping of actual values to human readable names or an iterable containing (actual value, human readable name) tuples.zfields.E005)ri   r   r   r   r   r   	TypeError
ValueErrorallr~   maxr   r   )rw   choice_max_lengthchoices_group
group_namegroup_choicesr   r   s   `      rN   r   zField._check_choices=  s   ||I$,,1Zc5R.$	  !\\ .	M,9)
MK -:  ??.=(+-0=	)%* --G.	J */@4??/RLL8:KL (	  I LLX 	
 	
[ z* ( z* K$.z--e4D<R<R= ??.:eS3I(+,=s5z(J%Ks0   /D5D*#D*D'&D'*5F"1FFc                 z   ddl m} | j                  t        u st	        | j                  |      s|g S g }|D ]   }t        j                  || j                        s%t        |   }t        | j                  dd      sL|j                  j                  r6| j                   d}|j                  t        j                  || d             |j                  j                  rd| j                  j                   j"                  v r|j$                   d	}|j                  t        j                  || d
              |S )Nr   Valueallowed_defaultFz cannot be used in db_default.zfields.E012r   supports_expression_defaultszH does not support default database values with expressions (db_default).zfields.E011)django.db.models.expressionsr   r   r;   r   r   allow_migrate_modelr   r   r   _db_default_expressionfeaturesr   appendr   r   rU   required_db_featuresdisplay_name)rw   	databasesr   r   errorsdbr   msgs           rN   r   zField._check_db_default  s   6 OO|+$//51 I 	MB--b$**=$RJ4668I5Q##@@))GHfll3D]KL ##@@1::##889 "../ 0< <  fll3D]KL)	M* rM   c                 T    | j                   dvrt        j                  d| d      gS g S )N)NTFz''db_index' must be None, True or False.zfields.E006r   )r   r   r   rv   s    rN   r   zField._check_db_index  s5    == 33=$  IrM   c                 h   | j                   r|sg S g }|D ]  }t        j                  || j                        s$t        |   }|j
                  j                  rDd| j                  j                  j                  v rg|j                  t        j                  |j                   d| d              |S )Nsupports_commentsz3 does not support comments on columns (db_comment).zfields.W163r   )r   r   r   r   r   r   r   rU   r   r   r   Warningr   )rw   r   r   r   r   r   s         rN   r   zField._check_db_comment  s    iI 	B--b$**=$RJ##55&$***:*:*O*OONN%223 40 1 (		  rM   c                     | j                   r@| j                  r4t        j                  j                  st        j                  dd| d      gS g S )Nz%Primary keys must not have null=True.zASet null=False on the field, or remove primary_key=True argument.zfields.E007hintr   r   )r}   re   r   r   !interprets_empty_strings_as_nullsr   r   rv   s    rN   r   z*Field._check_null_allowed_for_primary_keys  sP    		''II ;< $
 
 IrM   c                     |g S g }|D ]U  }t        j                  || j                        s$|j                  t	        |   j
                  j                  | fi |       W |S rS   )r   r   r   extendr   
validationcheck_field)rw   r   r   r   aliass        rN   r   z$Field._check_backend_specific_checks  sf    I 	YE))%<k%0;;GGWPVWX	Y rM   c                     g }t        | j                        D ]S  \  }}t        |      r|j                  t	        j
                  ddj                  |t        |            | d             U |S )Nz"All 'validators' must be callable.zKvalidators[{i}] ({repr}) isn't a function or instance of a validator class.)ireprzfields.E008r   )	enumerater   callabler   r   r   formatr   )rw   r   r   	validators       rN   r   zField._check_validators  st    %doo6 	LAyI&LL<==CV"#%))_ >D >
 !(	  rM   c           	      .   | j                   ~t        j                  | j                   j                  dd| j                  j
                  z        | j                   j                  d      | | j                   j                  dd            gS | j                  ~t        j                  | j                  j                  dd| j                  j
                  z        | j                  j                  d      | | j                  j                  dd            gS g S )	Nr   z@%s has been removed except for support in historical migrations.r   r   zfields.EXXXr   z%s has been deprecated.zfields.WXXX)system_check_removed_detailsr   r   getr\   rI   system_check_deprecated_detailsr   rv   s    rN   r   z Field._check_deprecation_details  s   ,,85599&(,(?(?@
 ::>>vF88<<T=Q	  11=88<<84>>;R;RR ==AA&I;;??mT	 	 	rM   c                     || j                   j                  j                  k(  r||| k(  r| j                  S ddlm}  ||| |      S Nr   )Col)r   rU   db_table
cached_colr   r   )rw   r   output_fieldr   s       rN   get_colzField.get_col  sC    DJJ$$--- LD$8??"45$--rM   c                     | j                   S rS   )_choicesrv   s    rN   ri   zField.choices!  s    }}rM   c                 $    t        |      | _        y rS   )r   r   rw   r   s     rN   ri   zField.choices%  s    )%0rM   c                 \    ddl m}  || j                  j                  j                  |       S r   )r   r   r   rU   r   )rw   r   s     rN   r   zField.cached_col)  s"    44::##,,d33rM   c                 
    ||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.
        rL   )rw   compilersqlparamss       rN   select_formatzField.select_format/  s     F{rM   c                    i }i ddddddddddddd	dd
t         dt         dddddddddddddddddddg dd}dddddd}ddh}|j                         D ]W  \  }}t        | |j                  ||            }t	        |t
              r|j                  }||v r||k7  sH|||<   N||usS|||<   Y | j                  j                  d| j                  j                  }|j                  d      r|j                  dd       }n|j                  d!      r|j                  d!d       }n|j                  d"      r|j                  d"d       }nk|j                  d#      r|j                  d#d       }nG|j                  d$      r|j                  d$d       }n#|j                  d%      r|j                  d%d       }| j                  |g |fS )&a|  
        Return 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, e.g.
           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, int, 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.
        rr   Nr}   Fr~   rg   rf   re   r   r   r   rk   Tr   rh   r   r   ri   rm   rQ   rj   )r   r   r   r   rl   r   r   r   r|   r   )rg   rl   r   rr   r   r   r   zdjango.db.models.fields.relatedzdjango.db.modelszdjango.db.models.fields.filesz!django.db.models.fields.generatedzdjango.db.models.fields.jsonzdjango.db.models.fields.proxyzdjango.db.models.fields)r;   itemsr   r   r   r   funcr\   rJ   rK   
startswithreplacer{   )	rw   keywords	possiblesattr_overridesequals_comparisonr{   r   r   r   s	            rN   deconstructzField.deconstruct7  ss   B 
D
5
 $
 e	

 U
 E
 
 |
 ,
 
 
 t
 
 t
 t
  !
" #
$ !!"-
	2  /'+-
 '5&__. 
	+MD'D."4"4T4"@AE%!78

((G#%*HTN'%*HTN
	+ ..33T^^5P5PQ??<=<< ACUVD__<=<< ?ASTD__@A<< CEWXD__;<<< >@RSD__<=<< ?ASTD__67<< 9;MND		4X..rM   c                 P    | j                         \  }}}} | j                  |i |S )z
        Uses deconstruct() to clone a new copy of this Field.
        Will not preserve any class attachments/attribute names.
        )r  r\   )rw   r{   r   argsr   s        rN   clonezField.clone  s1    
 $(#3#3#5 dD&t~~t.v..rM   c                     t        |t              r6| j                  |j                  k(  xr t        | dd       t        |dd       k(  S t        S Nr   )r   r5   r   r   NotImplementedrw   others     rN   __eq__zField.__eq__  sS    eU#((E,B,BB /wgtH.H/ / rM   c                    t        |t              r| j                  |j                  k7  st        | d      s%t        |d      s| j                  |j                  k  S t        | d      t        |d      k7  rt        | d       S | j                  j
                  j                  | j                  j
                  j                  f|j                  j
                  j                  |j                  j
                  j                  fk  S t        S r  )	r   r5   r   r   r   rU   rW   rX   r  r  s     rN   __lt__zField.__lt__  s     eU#%%)?)??tW-w/,,u/E/EEEw'75'+BB"4111 

((22DJJ4D4D4O4OPKK%%//KK%%00T   rM   c                 ,    t        | j                        S rS   )hashr   rv   s    rN   __hash__zField.__hash__  s    D))**rM   c                 *   t        j                   |       }| j                  rct        j                   | j                        |_        t        | j                  d      r)| j                  j                  | u r||j                  _        ||t	        |       <   |S )Nfield)copyr   r   r  r   )rw   memodictr   s      rN   __deepcopy__zField.__deepcopy__  sv     iio#yy):):;Ct(('2t7H7H7N7NRV7V),  & D
rM   c                 z    t               }| j                  |_        | j                  j                         |_        |S rS   )r4   r\   __dict__r  rw   r   s     rN   __copy__zField.__copy__  s/     g}}))+
rM   c                 <   t        | d      s@| j                  j                         }|j                  dd       t        | j
                  f|fS t        | 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, use the app registry to load the
        model and then the field back.
        r   _get_defaultN)r   r!  r  popr_   r\   rZ   r   rU   rW   object_namer{   )rw   states     rN   
__reduce__zField.__reduce__  s     tW% MM&&(E IInd+DNN,e33JJ&&JJ((II
 
 	
rM   c                 <    | j                   r| j                         S y)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)r   get_default)rw   instances     rN   get_pk_value_on_savezField.get_pk_value_on_save  s     <<##%%rM   c                     |S )z
        Convert the input value into the expected Python data type, raising
        django.core.exceptions.ValidationError if the data can't be converted.
        Return the converted value. Subclasses should override this.
        rL   r   s     rN   	to_pythonzField.to_python  s	     rM   c                     i }t        | j                  j                        D ]  }|j                  t	        |di                |j                  | j
                  xs i        |S )Ndefault_error_messages)reversedr\   __mro__updater   r   )rw   messagescs      rN   rl   zField.error_messages  sY    $..001 	FAOOGA'?DE	F,,23rM   c                 6    g | 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.
        )default_validatorsr   rv   s    rN   r   zField.validators  s      =((<4+;+;<<rM   c                    || j                   v ry g }| j                  D ]  }	  ||        |rt        j                  |      y # t        j                  $ rg}t	        |d      r6|j
                  | j                  v r| j                  |j
                     |_        |j                  |j                         Y d }~d }~ww xY w)Ncode)
empty_valuesr   r   ValidationErrorr   r:  rl   messager   
error_list)rw   r   r   ves        rN   run_validatorszField.run_validators	  s    D%%% 	,A,%	, ,,V44  -- ,1f%!&&D4G4G*G $ 3 3AFF ;AIall++,s   AB>AB99B>c                 
   | j                   sy| j                  y|| j                  vrk| j                  D ]5  \  }}t        |t        t
        f      r|D ]  \  }}||k(  s  y /||k(  s5 y t        j                  | j                  d   dd|i      |0| j                  s$t        j                  | j                  d   d      | j                  s3|| j                  v r$t        j                  | j                  d   d      yy)z
        Validate value and raise ValidationError if necessary. Subclasses
        should override this to provide validation logic.
        Nrd   r   r:  r  re   )r:  rf   )rk   ri   r;  r   r   tupler   r<  rl   re   rf   )rw   r   model_instance
option_keyoption_valueoptgroup_keyoptgroup_values          rN   validatezField.validate  s   
 }}<<#T5F5F(F,0LL (
LlT5M: 9E #4n L0"# j( ,,##$45%'  =,,T-@-@-HvVVzzet'8'88,,T-@-@-IPWXX 9zrM   c                 n    | j                  |      }| j                  ||       | j                  |       |S )z
        Convert the value's type and run validation. Validation errors
        from to_python() and validate() are propagated. Return the correct
        value if no error is raised.
        )r/  rJ  rA  rw   r   rE  s      rN   cleanzField.clean8  s3     u%e^,E"rM   c                 X    t        | j                  |j                  j                  d      S )Nqn_)r   r!  ops
quote_namerw   r   s     rN   db_type_parameterszField.db_type_parametersC  s    4==*..*C*CUKKrM   c                     | j                  |      }	 |j                  | j                            |z  S # t        $ r Y yw xY w)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.
        N)rS  data_type_check_constraintsget_internal_typeKeyError)rw   r   datas      rN   db_checkzField.db_checkF  sO     &&z2	66t7M7M7OPSWW  		s   3 	??c                     | j                  |      }	 |j                  | j                            }t        |      r ||      S ||z  S # t        $ r Y yw xY w)zk
        Return the database column data type for this field, for the provided
        connection.
        N)rS  
data_typesrV  r   rW  )rw   r   rX  column_types       rN   db_typezField.db_typeT  sf    ( &&z2	&$//0F0F0HIK
 $"4((%%  		s   A 	AAc                 $    | 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]  rR  s     rN   rel_db_typezField.rel_db_types  s     ||J''rM   c                     |j                   j                  j                  | j                               }|r|| j	                  |      z  S | j                  |      S )z3Return the data type to use in the Cast() function.)rP  cast_data_typesr   rV  rS  r]  )rw   r   r]  s      rN   cast_db_typezField.cast_db_type{  sM    ..0044T5K5K5MNT44Z@@@||J''rM   c                 P    | j                  |      }| j                  |      }||dS )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]  rY  )rw   r   type_stringcheck_strings       rN   db_parameterszField.db_parameters  s0     ll:.}}Z0!
 	
rM   c                 T    |j                   j                  | j                               S rS   )data_types_suffixr   rV  rR  s     rN   db_type_suffixzField.db_type_suffix  s"    ++//0F0F0HIIrM   c                 8    t        | d      r| j                  gS g S )Nfrom_db_value)r   rl  rR  s     rN   get_db_converterszField.get_db_converters  s     4)&&''	rM   c                 6    | j                   xs | j                  S rS   )r   r}   rv   s    rN   rg   zField.unique  s    ||/t///rM   c                 >    | j                   xs t        j                  S rS   )r   r
   DEFAULT_INDEX_TABLESPACErv   s    rN   r   zField.db_tablespace  s    ""Gh&G&GGrM   c                 ^    | j                   t        uxr t        j                  j                  S )z6Private API intended only to be used by Django itself.)r   r;   r   r   can_return_columns_from_insertrv   s    rN   db_returningzField.db_returning  s*     OO</ C##BB	
rM   c                    | j                   xs || _         | j                         \  | _        | _        | j                  d u| _        | j
                  /| j                   r"| j                   j                  dd      | _        y y y )Nru    )r{   get_attname_columnattnamecolumnconcreterr   r  )rw   r{   s     rN   set_attributes_from_namezField.set_attributes_from_name  sl    II%	$($;$;$=!dk4/$ $		 1 1#s ;D *3$rM   c                    | j                  |       || _        |j                  j                  | |       | j                  r&t        || j                  | j                  |              | j                  Ld| j                  z  |j                  vr0t        |d| j                  z  t        |j                  |              yyy)z
        Register the field with the model class it belongs to.

        If private_only is True, create a separate instance of this field
        for every subclass of cls, even if cls is not an abstract model.
        )privateNzget_%s_display)r  )rz  r   rU   	add_fieldrx  setattrrw  descriptor_classri   r{   r!  r   _get_FIELD_display)rw   r   r{   private_onlys       rN   contribute_to_classzField.contribute_to_class  s     	%%d+
		D,7;;Ct'<'<T'BC<<#
  $))+3<<?$tyy0!#"8"8E @ $rM   c                 F    | j                   t        || j                        iS )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   rw  r"  s     rN   get_filter_kwargs_for_objectz"Field.get_filter_kwargs_for_object  s    
 		73566rM   c                     | j                   S rS   )r{   rv   s    rN   get_attnamezField.get_attname  s    yyrM   c                 J    | j                         }| j                  xs |}||fS rS   )r  rj   )rw   rw  rx  s      rN   rv  zField.get_attname_column  s(    ""$*7rM   c                 .    | j                   j                  S rS   )r\   rI   rv   s    rN   rV  zField.get_internal_type  s    ~~&&&rM   c                 .    t        || j                        S )z(Return field's value just before saving.r   rw  )rw   rE  adds      rN   pre_savezField.pre_save  s    ~t||44rM   c                 F    t        |t              r|j                         }|S )zAPerform preliminary non-db specific value checks and conversions.)r   r"   _proxy____castr   s     rN   get_prep_valuezField.get_prep_value  s    eW%((*ErM   c                 ,    |s| j                  |      }|S )z
        Return field's value prepared for interacting with the database backend.

        Used by the default implementations of get_db_prep_save().
        )r  rw   r   r   prepareds       rN   get_db_prep_valuezField.get_db_prep_value  s     ''.ErM   c                 F    t        |d      r|S | j                  ||d      S )z9Return field's value prepared for saving into a database.as_sqlF)r   r  )r   r  rw   r   r   s      rN   get_db_prep_savezField.get_db_prep_save  s)    5(#L%%e
U%SSrM   c                 &    | j                   t        uS )z;Return a boolean of whether this field has a default value.)r   r;   rv   s    rN   has_defaultzField.has_default  s    ||<//rM   c                 "    | j                         S )z(Return the default value for this field.)r%  rv   s    rN   r+  zField.get_default  s      ""rM   c                 *     j                         r&t         j                        r j                  S  fdS  j                  t        urddlm  fdS  j                  r& j                  r t        j                  j                  st        S t        S )Nc                       j                   S rS   )r   rv   s   rN   <lambda>z$Field._get_default.<locals>.<lambda>  s    4<< rM   r   )DatabaseDefaultc                  ,      j                         S )N)r   )r   )r  rw   s   rN   r  z$Field._get_default.<locals>.<lambda>  s    ?++$ rM   )r  r   r   r   r;   r   r  empty_strings_allowedre   r   r   r   ra   r   )rw   r  s   `@rN   r%  zField._get_default  sp    %||#''??,.D 
 **yy''II
rM   c                 d    | j                   }|t        urt        |d      sddlm}  |||       }|S )Nresolve_expressionr   r   )r   r;   r   r   r   )rw   r   r   s      rN   r   zField._db_default_expression  s7    __
\)',3
 ;z40JrM   c                    | j                   $|rt        | j                   |      S | j                   S | j                  j                  }|xs | j	                         }t        j                  t        | j                  d      r$| j                  j                         j                  nd      }|j                  j                  |      }|r |j                  | }|r|ng |D cg c]  } ||      t        |      f c}z   S c c}w )z{
        Return choices with a default blank choices included, for use
        as <select> choices for this field.
        get_related_fieldr   )ri   r   r   r   get_limit_choices_tooperator
attrgetterr   r  rw  _default_managercomplex_filterorder_byr   )	rw   include_blankblank_choicern   ordering	rel_modelchoice_funcqsxs	            rN   get_choiceszField.get_choices  s     <<#*4<<FF<<%%++	+Jt/H/H/J))t((*=> //199

 ''667GHh'B -2.0:
)*[^SV$:
 
 	
 :
s   C>c                 6    t        | j                  |            S )z
        Return a string value of this field from the passed obj.
        This is used by the serialization framework.
        )r   value_from_objectr"  s     rN   value_to_stringzField.value_to_string8  s    
 4))#.//rM   c                 >    t        t        | j                              S )z#Flattened version of choices tuple.)r   r   ri   rv   s    rN   flatchoiceszField.flatchoices?  s     ODLL122rM   c                 2    t        || j                  |       y rS   )r~  r{   )rw   r,  rX  s      rN   save_form_datazField.save_form_dataD  s    $))T*rM   c                 t   | j                    t        | j                        | j                  d}| j	                         r=t        | j                        r| j                  |d<   d|d<   n| j                         |d<   | j                  | j                   xs | j	                         xs d|v  }| j                  |      |d<   | j                  |d<   | j                  rd|d	<   ||}nt        j                  }t        |      D ]
  }|d
vs||=  |j                  |       |t        j                   } |di |S )z4Return a django.forms.Field instance for this field.)requiredr   rm   initialTshow_hidden_initialNr  ri   coerceempty_value)r  r  ri   r  widgetr   r  rm   rl   r  disabledrL   )rf   r%   rr   rm   r  r   r   r+  ri   r  r/  re   r   TypedChoiceFieldr   r4  r-   )rw   
form_classchoices_form_classr   defaultsr  ks          rN   	formfieldzField.formfieldG  sG    !JJd//0

 %&*ll#26./&*&6&6&8#<<# JJ   "9i6&9+M #'"2"2"2"OHY!%HXyy*.'!-/
"33
 &\ "   q	" 	J%H%%rM   c                 .    t        || j                        S )z;Return the value of this field in the given model instance.r  r"  s     rN   r  zField.value_from_objectx  s    sDLL))rM   c                     t        d      )zReturn a slice of this field.z$This field does not support slicing.r   )rw   
expressionstartlengths       rN   slice_expressionzField.slice_expression|  s     FGGrM   rS   FNN)crI   rJ   rK   __doc__r  r   r   EMPTY_VALUESr;  r   r   r8  ru   r1  r   r   non_db_attrshiddenmany_to_manymany_to_oneone_to_many
one_to_onerelated_model	generatedr   r  rx   propertydescriptionr;   r   r   r   r   r   classmethodr   r   r   r   r   r   r   r   r   r   ri   setterr#   r   r  r  r  r  r  r  r  r#  r)  r-  r/  rl   rA  rJ  rM  rS  rY  r]  r_  rb  rg  rj  rm  rg   r   rs  rz  r  r  r  rv  rV  r  r  r  r  r  r+  r%  r   r(   r  r  r  r  r  r  r  __classcell__r\   s   @rN   r5   r5   v   s'   ( !
//0L
 DE./01NO4
 '+##' L" FLKKJMI(

 <(K 3<.|8
 D T TG
RB
,.(6.   ^^1 1 4 4
\/|/(+	
.	   = =5 Y>	L&>((
J
 0 0 H H 
 
<07
'5T0#  *   &
:0 3 3+/&b*HrM   r5   c                   j     e Zd ZdZ ed       ed      dZ ed      Zd Zd Z fdZ	 fd	Z
 xZS )
r,   Fu3   “%(value)s” value must be either True or False.u:   “%(value)s” value must be either True, False, or None.invalidinvalid_nullablezBoolean (Either True or False)c                      y)Nr,   rL   rv   s    rN   rV  zBooleanField.get_internal_type      rM   c                     | j                   r|| j                  v ry |dv rt        |      S |dv ry|dv ryt        j                  | j
                  | j                   rdnd   dd|i	      )
N)TF)tTrue1T)fFalse0Fr  r  r   rC  )re   r;  boolr   r<  rl   r   s     rN   r/  zBooleanField.to_python  sx    99$"3"33M!;&&''((dii 2YOU#
 	
rM   c                 J    t         |   |      }|y | j                  |      S rS   r   r  r/  rw   r   r\   s     rN   r  zBooleanField.get_prep_value  s)    &u-=~~e$$rM   c                     | j                   ,| j                         xs d|v  }d| j                  |      i}n1| j                  rt        j
                  nt        j                  }|dd}t        |    di i ||S )Nr  ri   r  F)r  r  rL   )	ri   r  r  re   r   r<   r,   r   r  )rw   r   r  r  r  r\   s        rN   r  zBooleanField.formfield  s    <<#!%!1!1!3!JyF7JKM!4#3#3-#3#PQH3799//%BTBTJ '1eDHw :#9h#9&#9::rM   )rI   rJ   rK   r  ru   r1  r  rV  r/  r  r  r  r  s   @rN   r,   r,     sI    !JKZ[ 45K
 %
; 
;rM   r,   c                        e Zd Zdd fd
Zed        Z fdZd Zd Z fdZ	 fd	Z
d
 Zd Z fdZ fdZ fdZd Z xZS )r-   Ndb_collationc                    t        |   |i | || _        | j                  9| j                  j                  t	        j                  | j                               y y rS   )r   r   r  r~   r   r   MaxLengthValidatorrw   r  r  r   r\   s       rN   r   zCharField.__init__  sM    $)&)(??&OO"":#@#@#QR 'rM   c                 F    | j                   t        d      S t        d      S )NzString (up to %(max_length)s)zString (unlimited))r~   ru   rv   s    rN   r  zCharField.description  s$    ??&455)**rM   c                     |j                  d      xs g }g t        |   di || j                  |       | j                  di |S Nr   rL   )r   r   r   _check_db_collation_check_max_length_attributerw   r   r   r\   s      rN   r   zCharField.check  sa    JJ{+1r	
W]$V$
%%i0
 .T--77
 	
rM   c                    | j                   Wt        j                  j                  s"d| j                  j
                  j                  v rg S t        j                  d| d      gS t        | j                   t              r)t        | j                   t              s| j                   dk  rt        j                  d| d      gS g S )Nsupports_unlimited_charfieldz0CharFields must define a 'max_length' attribute.zfields.E120r   r   z('max_length' must be a positive integer.zfields.E121)r~   r   r   r   r   rU   r   r   r   r   intr  r   s     rN   r  z%CharField._check_max_length_attribute  s    ??"##@@1::##889 	F$  4??C0$//40!# >$  IrM   c                 b   g }|D ]  }t        j                  || j                        s$t        |   }| j                  :d| j                  j
                  j                  v r]|j                  j                  rt|j                  t        j                  d|j                  z  | d              |S )Nsupports_collation_on_charfieldz7%s does not support a database collation on CharFields.fields.E190r   )r   r   r   r   r  rU   r   r   r  r   r   r   r   rw   r   r   r   r   s        rN   r  zCharField._check_db_collation       	B--b$**=$RJ!!)4::##889&&FFLL&(2(?(?@ (		$ rM   c                 f    | j                   |j                  j                  S t        |   |      S rS   )r~   rP  "cast_char_field_without_max_lengthr   rb  )rw   r   r\   s     rN   rb  zCharField.cast_db_type  s-    ??">>DDDw#J//rM   c                 D    t         |   |      }| j                  |d<   |S N	collationr   rg  r  rw   r   	db_paramsr\   s      rN   rg  zCharField.db_parameters  (    G)*5	!%!2!2	+rM   c                      y)Nr-   rL   rv   s    rN   rV  zCharField.get_internal_type      rM   c                 @    t        |t              s||S t        |      S rS   r   r   r   s     rN   r/  zCharField.to_python      eS!U]L5zrM   c                 D    t         |   |      }| j                  |      S rS   r  r  s     rN   r  zCharField.get_prep_value  !    &u-~~e$$rM   c                     d| j                   i}| j                  rt        j                  j                  sd |d<   |j                  |       t        |   di |S )Nr~   r  rL   )r~   re   r   r   r   r4  r   r  )rw   r   r  r\   s      rN   r  zCharField.formfield  sQ     !$//299Z00RR&*H]#w ,8,,rM   c                 l    t         |          \  }}}}| j                  r| j                  |d<   ||||fS Nr  r   r  r  rw   r{   r   r  r   r\   s        rN   r  zCharField.deconstruct  A    #(7#6#8 dD&%)%6%6F>"T4''rM   c                 "    ddl m}  ||||      S Nr   )Substrdjango.db.models.functionsr  rw   r  r  r  r  s        rN   r  zCharField.slice_expression       5j%00rM   )rI   rJ   rK   r   r  r  r   r  r  rb  rg  rV  r/  r  r  r  r  r  r  s   @rN   r-   r-     sW    +/ S + +
<,0


%	-(1rM   r-   c                   B    e Zd Zej                  gZ ed      ZddddZy)r.   zComma-separated integerszRCommaSeparatedIntegerField is removed except for support in historical migrations.zJUse CharField(validators=[validate_comma_separated_integer_list]) instead.zfields.E901r   r   r   N)	rI   rJ   rK   r   %validate_comma_separated_integer_listr8  ru   r  r   rL   rM   rN   r.   r.   &  s3    $JJK./K% 
$ rM   r.   c                     t        j                  |       r.t        j                  | t        j                   j                        } | S rS   )r   is_aware
make_naivedatetimeutc)r   s    rN   	_to_naiver,  6  s3    ##E8+<+<+@+@ALrM   c                  <    t        t        j                               S rS   )r,  r   nowrL   rM   rN   _get_naive_nowr/  <  s    X\\^$$rM   c                   2     e Zd Z fdZd Zd ZddZ xZS )DateTimeCheckMixinc                 f    g t        |   di || j                         | j                         S r   )r   r   !_check_mutually_exclusive_options_check_fix_default_valuerw   r   r\   s     rN   r   zDateTimeCheckMixin.checkA  sE    
W]$V$
335
 **,
 	
rM   c                     | j                   | j                  | j                         g}|D cg c]  }|dv c}j                  d      }|dkD  rt	        j
                  d| d      gS g S c c}w )N)NFTrz   zqThe options auto_now, auto_now_add, and default are mutually exclusive. Only one of these options may be present.zfields.E160r   )auto_now_addauto_nowr  countr   r   )rw   mutually_exclusive_optionsoptionenabled_optionss       rN   r3  z4DateTimeCheckMixin._check_mutually_exclusive_optionsH  s    
 MM&
" 7Q
,2F-'

%+ 	 Q& $  I
s   A)c                     g S rS   rL   rv   s    rN   r4  z+DateTimeCheckMixin._check_fix_default_valuea  s    	rM   c                 t   |
t               }t        j                  d      }||z
  }||z   }t        |t        j                        rt	        |      }n<t        |t        j
                        sJ |j                         }|j                         }||cxk  r|k  rn g S t        j                  dd| d      gS g S )a1  
        Check if the given value appears to have been provided as a "fixed"
        time value, and include a warning in the returned list if it does. The
        value argument must be a date object or aware/naive datetime object. If
        now is provided, it must be a naive datetime object.
        
   )secondszFixed default value provided.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`zfields.W161r   )r/  r*  	timedeltar   r,  dater   r   )rw   r   r.  offsetloweruppers         rN   _check_if_value_fixedz(DateTimeCheckMixin._check_if_value_fixedf  s     ; "C##B/ffeX../e$EeX]]333JJLEJJLEE"U" 	 3F
 $
  	rM   rS   )rI   rJ   rK   r   r3  r4  rF  r  r  s   @rN   r1  r1  @  s    
2
 rM   r1  c                        e Zd ZdZ ed       ed      dZ ed      Z	 d fd	Zd Z fdZ	d	 Z
d
 Z fdZ fdZ fdZddZd Z fdZ xZS )r/   FuR   “%(value)s” value has an invalid date format. It must be in YYYY-MM-DD format.T   “%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid date.)r  invalid_datezDate (without time)c                 b    ||c| _         | _        |s|r
d|d<   d|d<   t        |   ||fi | y NFrk   Trf   r8  r7  r   r   rw   rr   r{   r8  r7  r   r\   s         rN   r   zDateField.__init__  B     ,4\(t(|!&F:"F7Ot6v6rM   c                    | j                         sg S | j                  }t        |t        j                        rt	        |      j                         }nt        |t        j
                        rng S | j                  |      S 
        Warn that using an actual date or datetime value is probably wrong;
        it's only evaluated on server startup.
        )r  r   r   r*  r,  rB  rF  r   s     rN   r4  z"DateField._check_fix_default_value  sj    
 !IeX../e$))+Ex}}- I))%00rM   c                     t         |          \  }}}}| j                  rd|d<   | j                  rd|d<   | j                  s| j                  r|d= |d= ||||fS )NTr8  r7  rk   rf   r   r  r8  r7  r  s        rN   r  zDateField.deconstruct  sj    #(7#6#8 dD&==!%F:%)F>"==D--z"wT4''rM   c                      y)Nr/   rL   rv   s    rN   rV  zDateField.get_internal_type  r  rM   c                    ||S t        |t        j                        r_t        j                  r?t	        j
                  |      r*t	        j                         }t	        j                  ||      }|j                         S t        |t        j                        r|S 	 t        |      }||S 	 t        j                  | j                  d   dd|i      # t        $ r( t        j                  | j                  d   dd|i      w xY w)NrI  r   rC  r  )r   r*  r
   USE_TZr   r(  get_default_timezoner)  rB  r   r   r   r<  rl   )rw   r   default_timezoneparseds       rN   r/  zDateField.to_python  s    =LeX../8#4#4U#; $,#@#@#B  ++E3CD::<eX]]+L		&F! " ((	*U#
 	
  	,,##N3#' 	s   C 1Dc                     | j                   s| j                  r9|r7t        j                  j	                         }t        || j                  |       |S t        | !  ||      S rS   )	r8  r7  r*  rB  todayr~  rw  r   r  rw   rE  r  r   r\   s       rN   r  zDateField.pre_save  sM    ==T..3MM'')ENDLL%8L7#NC88rM   c           	         t        |   ||fi | | j                  sat        |d| j                  z  t        |j                  | d             t        |d| j                  z  t        |j                  | d             y y )Nzget_next_by_%sT)r  is_nextzget_previous_by_%sF)r   r  re   r~  r{   r   _get_next_or_previous_by_FIELDrw   r   r{   r   r\   s       rN   r  zDateField.contribute_to_class  s}    #C88yy 499,66dD $tyy066dE rM   c                 D    t         |   |      }| j                  |      S rS   r  r  s     rN   r  zDateField.get_prep_value  r  rM   c                 ^    |s| j                  |      }|j                  j                  |      S rS   )r  rP  adapt_datefield_valuer  s       rN   r  zDateField.get_db_prep_value  *    ''.E~~33E::rM   c                 L    | j                  |      }|dS |j                         S NrQ   r  	isoformatrw   r   vals      rN   r  zDateField.value_to_string  '    $$S)[r5cmmo5rM   c                 F    t        |   di dt        j                  i|S Nr  rL   )r   r  r   r/   r5  s     rN   r  zDateField.formfield  0    w  
eoo
 	
rM   NNFFr  )rI   rJ   rK   r  ru   r1  r  r   r4  r  rV  r/  r  r  r  r  r  r  r  r  s   @rN   r/   r/     s}    !$
 )
	 )*K JO71&	(
<9$%;6
 
rM   r/   c                        e Zd ZdZ ed       ed       ed      dZ ed      Zd Zd Zd	 Z	 fd
Z
 fdZddZd Z fdZ xZS )r0   Fue   “%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ] format.rH  uq   “%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ]) but it is an invalid date/time.)r  rI  invalid_datetimezDate (with time)c                     | j                         sg S | j                  }t        |t        j                  t        j                  f      r| j                  |      S g S rP  )r  r   r   r*  rB  rF  r   s     rN   r4  z&DateTimeField._check_fix_default_value%  sM    
 !Ieh//?@--e44	rM   c                      y)Nr0   rL   rv   s    rN   rV  zDateTimeField.get_internal_type3      rM   c                    ||S t        |t        j                        r|S t        |t        j                        rt        j                  |j                  |j                  |j
                        }t        j                  rq	 | j                  j                   d| j                   }t        j                  d| d| dt               t        j                          }t        j"                  ||      }|S 	 t%        |      }||S 	 	 t/        |      }|5t        j                  |j                  |j                  |j
                        S 	 t)        j*                  | j,                  d
   d
d|i      # t        $ r d}Y w xY w# t&        $ r( t)        j*                  | j,                  d   dd|i      w xY w# t&        $ r( t)        j*                  | j,                  d	   d	d|i      w xY w)Nr   	(unbound)DateTimeField  received a naive datetime ($) while time zone support is active.rq  r   rC  rI  r  )r   r*  rB  yearmonthdayr
   rV  r   rI   r{   AttributeErrorwarningswarnRuntimeWarningr   rW  
make_awarer   r   r   r<  rl   r   )rw   r   r{   rX  rY  s        rN   r/  zDateTimeField.to_python6  s   =LeX../LeX]]+%%ejj%++uyyIE
'"jj112!DII;?D $TF*Fug N3 3"
 $,#@#@#B  ++E3CDL		#E*F! "		&F!((fllFJJOO " ((	*U#
 	
C & '&D'  	,,##$67'' 	  	,,##N3#' 	s+   %E/ 4F  AF4 /E=<E= 1F141G%c                     | j                   s| j                  r/|r-t        j                         }t	        || j
                  |       |S t        |   ||      S rS   )r8  r7  r   r.  r~  rw  r   r  r\  s       rN   r  zDateTimeField.pre_savek  sF    ==T..3LLNENDLL%8L7#NC88rM   c                    t         |   |      }| j                  |      }|t        j                  rt        j                  |      rq	 | j                  j                  d| j                  }t        j                  d|d|dt               t        j                         }t        j                  ||      }|S # t        $ r d}Y Zw xY w)Nr   rv  rw  rx  ry  )r   r  r/  r
   rV  r   is_naiver   rI   r{   r}  r~  r  r  rW  r  )rw   r   r{   rX  r\   s       rN   r  zDateTimeField.get_prep_valuev  s    &u-u%X5F5Fu5M#"&**"5"5tyyA MM9=uF
  (<<>''/?@E " #"#s   
%B< <C
	C
c                 ^    |s| j                  |      }|j                  j                  |      S rS   )r  rP  adapt_datetimefield_valuer  s       rN   r  zDateTimeField.get_db_prep_value  s*    ''.E~~77>>rM   c                 L    | j                  |      }|dS |j                         S rf  rg  ri  s      rN   r  zDateTimeField.value_to_string  rk  rM   c                 F    t        |   di dt        j                  i|S rm  )r   r  r   r0   r5  s     rN   r  zDateTimeField.formfield  2    w  
e11
 	
rM   r  )rI   rJ   rK   r  ru   r1  r  r4  rV  r/  r  r  r  r  r  r  r  s   @rN   r0   r0     sw    !9
 6
 .
 &'K3
j9(?6
 
rM   r0   c                        e Zd ZdZd ed      iZ ed      Z	 	 	 	 d fd	Z fdZd Z	d Z
d	 Ze fd
       Zed        Z fdZd Zd Zd Z fdZ fdZ xZS )r1   Fr  u/   “%(value)s” value must be a decimal number.zDecimal numberc                 F    ||c| _         | _        t        |   ||fi | y rS   )
max_digitsdecimal_placesr   r   )rw   rr   r{   r  r  r   r\   s         rN   r   zDecimalField.__init__  s*     0:>,,t6v6rM   c                     t        |   di |}g | j                         | j                         }|s#|j	                   | j
                  di |       |S |j	                  |       |S r   )r   r   _check_decimal_places_check_max_digitsr   $_check_decimal_places_and_max_digits)rw   r   r   digits_errorsr\   s       rN   r   zDecimalField.check  sy    ((
'')
##%
 MMC$CCMfMN  MM-(rM   c                     	 t        | j                        }|dk  r
t               	 g S # t        $ r t	        j
                  d| d      gcY S t        $ r t	        j
                  d| d      gcY S w xY w)Nr   z7DecimalFields must define a 'decimal_places' attribute.zfields.E130r   z0'decimal_places' must be a non-negative integer.zfields.E131)r  r  r   r   r   r   )rw   r  s     rN   r  z"DecimalField._check_decimal_places  s    	 !4!45N! l" "& I#  	M$   	F$ 	   $) "A1!A10A1c                     	 t        | j                        }|dk  r
t               	 g S # t        $ r t	        j
                  d| d      gcY S t        $ r t	        j
                  d| d      gcY S w xY w)Nr   z3DecimalFields must define a 'max_digits' attribute.zfields.E132r   z('max_digits' must be a positive integer.zfields.E133)r  r  r   r   r   r   )rw   r  s     rN   r  zDecimalField._check_max_digits  s    	T__-JQ l" & I#  	I$   	>$ 	r  c                     t        | j                        t        | j                        kD  rt        j                  d| d      gS g S )Nz:'max_digits' must be greater or equal to 'decimal_places'.zfields.E134r   )r  r  r  r   r   r   s     rN   r  z1DecimalField._check_decimal_places_and_max_digits  sD    t""#c$//&::P$  	rM   c                 p    t         |   t        j                  | j                  | j                        gz   S rS   )r   r   DecimalValidatorr  r  )rw   r\   s    rN   r   zDecimalField.validators  s4    w!''9L9LM%
 
 	
rM   c                 B    t        j                  | j                        S )N)prec)decimalContextr  rv   s    rN   contextzDecimalField.context  s    DOO44rM   c                     t         |          \  }}}}| j                  | j                  |d<   | j                  | j                  |d<   ||||fS )Nr  r  )r   r  r  r  r  s        rN   r  zDecimalField.deconstruct  s]    #(7#6#8 dD&??&#'??F< *'+':':F#$T4''rM   c                      y)Nr1   rL   rv   s    rN   rV  zDecimalField.get_internal_type	  r  rM   c                    ||S 	 t        |t              r| j                  j                  |      }nt	        j
                  |      }|j                         s't        j                  | j                  d   dd|i      |S # t        j                  t        t        f$ r( t        j                  | j                  d   dd|i      w xY wNr  r   rC  )r   floatr  create_decimal_from_floatr  DecimalInvalidOperationr   r   r   r<  rl   	is_finite)rw   r   decimal_values      rN   r/  zDecimalField.to_python  s    =L
	%' $ F Fu M ' 6 &&(,,##I.' 
  (()Z@ 	,,##I.' 	s   AB   ACc                     t        |d      r|S |j                  j                  | j                  |      | j                  | j
                        S )Nr  )r   rP  adapt_decimalfield_valuer/  r  r  r  s      rN   r  zDecimalField.get_db_prep_save"  sB    5(#L~~66NN5!4??D4G4G
 	
rM   c                 D    t         |   |      }| j                  |      S rS   r  r  s     rN   r  zDecimalField.get_prep_value)  r  rM   c                 r    t        |   di | j                  | j                  t        j
                  d|S )N)r  r  r  rL   )r   r  r  r  r   r1   r5  s     rN   r  zDecimalField.formfield-  sB    w  
"oo"&"5"5#00 	
 	
rM   )NNNN)rI   rJ   rK   r  ru   r1  r  r   r   r  r  r  r#   r   r  r  rV  r/  r  r  r  r  r  s   @rN   r1   r1     s    !1FG $%K 	700	 
 

 5 5(,
%
 
rM   r1   c                   n     e Zd ZdZdZd ed      iZ ed      Zd Zd Z	ddZ
 fd	Zd
 Z fdZ xZS )r2   z
    Store timedelta objects.

    Use interval on PostgreSQL, INTERVAL DAY TO SECOND on Oracle, and bigint
    of microseconds on other databases.
    Fr  u]   “%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[.uuuuuu] format.Durationc                      y)Nr2   rL   rv   s    rN   rV  zDurationField.get_internal_typeI  rt  rM   c                     ||S t        |t        j                        r|S 	 t        |      }||S t        j                  | j                  d   dd|i      # t        $ r Y 2w xY wr  )r   r*  rA  r   r   r   r<  rl   rw   r   rY  s      rN   r/  zDurationField.to_pythonL  s}    =LeX//0L	#E*F !((	*U#
 	
  		s   A 	A$#A$c                 N    |j                   j                  r|S |y t        |      S rS   )r   has_native_duration_fieldr    r  s       rN   r  zDurationField.get_db_prep_value_  s)    88L=$U++rM   c                     g }|j                   j                  s%|j                  |j                  j                         |t
        |   |      z   S rS   )r   r  r   rP  convert_durationfield_valuer   rm  )rw   r   
convertersr\   s      rN   rm  zDurationField.get_db_convertersf  sD    
""<<jnnHHIEG5jAAArM   c                 B    | j                  |      }|dS t        |      S rf  )r  r!   ri  s      rN   r  zDurationField.value_to_stringl  s&    $$S)[r:oc&::rM   c                 F    t        |   di dt        j                  i|S rm  )r   r  r   r2   r5  s     rN   r  zDurationField.formfieldp  r  rM   r  )rI   rJ   rK   r  r  ru   r1  r  rV  r/  r  rm  r  r  r  r  s   @rN   r2   r2   8  sV     "11
 J-K
&,B;
 
rM   r2   c                   \     e Zd Zej                  gZ ed      Z fdZ fdZ	 fdZ
 xZS )r3   zEmail addressc                 H    |j                  dd       t        |   |i | y )Nr~      
setdefaultr   r   rw   r  r   r\   s      rN   r   zEmailField.__init__}  s%    ,,$)&)rM   c                 6    t         |          \  }}}}||||fS rS   r   r  r  s        rN   r  zEmailField.deconstruct  s*    #(7#6#8 dD& T4''rM   c                 F    t        |   di dt        j                  i|S rm  )r   r  r   r3   r5  s     rN   r  zEmailField.formfield  s4     w  
e..
 	
rM   )rI   rJ   rK   r   validate_emailr8  ru   r  r   r  r  r  r  s   @rN   r3   r3   y  s0    $334O$K*
(
 
rM   r3   c                   r     e Zd Z ed      Z	 	 	 	 	 	 	 d	 fd	Z fdZd Z fdZ fdZ	 fdZ
d Z xZS )
r6   z	File pathc                     |||c| _         | _        | _        ||c| _        | _        |j                  dd       t        	|   ||fi | y )Nr~   d   )r   match	recursiveallow_filesallow_foldersr  r   r   )
rw   rr   r{   r   r  r  r  r  r   r\   s
            rN   r   zFilePathField.__init__  sQ     15eY-	4:t~/:M,$,,,t6v6rM   c                 J    g t        |   di | | j                  di |S r   )r   r    _check_allowing_files_or_foldersr5  s     rN   r   zFilePathField.check  s9    
W]$V$
2T22<V<
 	
rM   c                 h    | j                   s%| j                  st        j                  d| d      gS g S )NzMFilePathFields must have either 'allow_files' or 'allow_folders' set to True.zfields.E140r   )r  r  r   r   r   s     rN   r  z.FilePathField._check_allowing_files_or_folders  s;    (:(:#$	  	rM   c                    t         |          \  }}}}| j                  dk7  r| j                  |d<   | j                  | j                  |d<   | j                  dur| j                  |d<   | j
                  dur| j
                  |d<   | j                  dur| j                  |d<   |j                  d	      d
k(  r|d	= ||||fS )NrQ   r   r  Fr  Tr  r  r~   r  )r   r  r   r  r  r  r  r   r  s        rN   r  zFilePathField.deconstruct  s    #(7#6#8 dD&99?!YYF6N::!"jjF7O>>&"&..F;4'$($4$4F=!U*&*&8&8F?#::l#s*|$T4''rM   c                 >    t         |   |      }|y t        |      S rS   r   r  r   r  s     rN   r  zFilePathField.get_prep_value  $    &u-=5zrM   c                     t        |   di t        | j                        r| j                         n| j                  | j                  | j
                  t        j                  | j                  | j                  d|S )N)r   r  r  r  r  r  rL   )
r   r  r   r   r  r  r   r6   r  r  r5  s     rN   r  zFilePathField.formfield  sl    w  

'/		':				!^^#11#//!%!3!3 

 
	
rM   c                      y)Nr6   rL   rv   s    rN   rV  zFilePathField.get_internal_type  rt  rM   )NNrQ   NFTF)rI   rJ   rK   ru   r  r   r   r  r  r  r  rV  r  r  s   @rN   r6   r6     sF    K.K 7 

( 
rM   r6   c                   \     e Zd ZdZd ed      iZ ed      Z fdZd Zd Z	 fdZ
 xZS )	r7   Fr  u&   “%(value)s” value must be a float.zFloating point numberc                     t         |   |      }|y 	 t        |      S # t        t        f$ r(}|j                  d| j                  d|d      |d }~ww xY wNzField 'z' expected a number but got r   )r   r  r  r   r   r\   r{   rw   r   r@  r\   s      rN   r  zFloatField.get_prep_value  s^    &u-=	<:& 	++>BiiO	   
  A#AAc                      y)Nr7   rL   rv   s    rN   rV  zFloatField.get_internal_type  s    rM   c                     ||S 	 t        |      S # t        t        f$ r( t        j                  | j
                  d   dd|i      w xY wr  )r  r   r   r   r<  rl   r   s     rN   r/  zFloatField.to_python  s[    =L	<:& 	,,##I.' 		   
 7Ac                 F    t        |   di dt        j                  i|S rm  )r   r  r   r7   r5  s     rN   r  zFloatField.formfield   s2    w  
e..
 	
rM   )rI   rJ   rK   r  ru   r1  r  r  rV  r/  r  r  r  s   @rN   r7   r7     sB    !1=> +,K	

 
rM   r7   c                        e Zd ZdZd ed      iZ ed      Z fdZd Ze	 fd       Z
 fdZd fd		Zd
 Zd Z fdZ xZS )r:   Fr  u)   “%(value)s” value must be an integer.Integerc                 F    g t        |   di || j                         S r   )r   r   _check_max_length_warningr5  s     rN   r   zIntegerField.check  s2    
W]$V$
++-
 	
rM   c                     | j                   1t        j                  d| j                  j                  z  d| d      gS g S )Nz*'max_length' is ignored when used with %s.zRemove 'max_length' from fieldzfields.W122r   )r~   r   r   r\   rI   rv   s    rN   r  z&IntegerField._check_max_length_warning  sG    ??&@nn--.9$  	rM   c                 l   t         |   }| j                         }t        j                  j                  |      \  8t        fd|D              s$|j                  t        j                               8t        fd|D              s$|j                  t        j                               |S )Nc              3      K   | ]T  }t        |t        j                        xr4 t        |j                        r|j	                         n|j                  k\   V y wrS   )r   r   MinValueValidatorr   limit_value)r   r   	min_values     rN   r   z*IntegerField.validators.<locals>.<genexpr>*  a      -
  9j&B&BC   	 5 56 ))+"..-
   AAc              3      K   | ]T  }t        |t        j                        xr4 t        |j                        r|j	                         n|j                  k   V y wrS   )r   r   MaxValueValidatorr   r  )r   r   	max_values     rN   r   z*IntegerField.validators.<locals>.<genexpr>7  r  r  )
r   r   rV  r   rP  integer_field_rangeanyr   r  r  )rw   validators_internal_typer  r  r\   s      @@rN   r   zIntegerField.validators#  s     g(..0)~~AA-P	9  -
 )-
 *
 z;;IFG  -
 )-
 *
 z;;IFGrM   c                     t         |   |      }|y 	 t        |      S # t        t        f$ r(}|j                  d| j                  d|d      |d }~ww xY wr  )r   r  r  r   r   r\   r{   r  s      rN   r  zIntegerField.get_prep_valueF  s^    &u-=	u::& 	++>BiiO	r  c                 z    t         |   |||      }|j                  j                  || j	                               S rS   )r   r  rP  adapt_integerfield_valuerV  rw   r   r   r  r\   s       rN   r  zIntegerField.get_db_prep_valueQ  s6    )%XF~~66ud>T>T>VWWrM   c                      y)Nr:   rL   rv   s    rN   rV  zIntegerField.get_internal_typeU  r  rM   c                     ||S 	 t        |      S # t        t        f$ r( t        j                  | j
                  d   dd|i      w xY wr  )r  r   r   r   r<  rl   r   s     rN   r/  zIntegerField.to_pythonX  s[    =L	u::& 	,,##I.' 	r  c                 F    t        |   di dt        j                  i|S rm  )r   r  r   r:   r5  s     rN   r  zIntegerField.formfieldd  s2    w  
e00
 	
rM   r  )rI   rJ   rK   r  ru   r1  r  r   r  r#   r   r  r  rV  r/  r  r  r  s   @rN   r:   r:   	  se    !1@A I,K
    D	X

 
rM   r:   c                   8     e Zd Z ed      ZdZd Z fdZ xZS )r*   zBig (8 byte) integerl    c                      y)Nr*   rL   rv   s    rN   rV  z!BigIntegerField.get_internal_typeq  s     rM   c                 l    t        |   di t        j                   dz
  t        j                  d|S )Nrz   )r  r  rL   )r   r  r*   
MAX_BIGINTr5  s     rN   r  zBigIntegerField.formfieldt  sC    w  
-8881<,77 
 	
rM   )	rI   rJ   rK   ru   r  r  rV  r  r  r  s   @rN   r*   r*   m  s"    *+K$J!
 
rM   r*   c                   "    e Zd Z ed      Zd Zy)rB   zSmall integerc                      y)NrB   rL   rv   s    rN   rV  z#SmallIntegerField.get_internal_type  s    "rM   N)rI   rJ   rK   ru   r  rV  rL   rM   rN   rB   rB   ~  s    O$K#rM   rB   c                   X     e Zd ZdZ ed      ZddddZ fdZ fdZ fd	Z	d
 Z
 xZS )r9   FzIPv4 addresszLIPAddressField has been removed except for support in historical migrations.z"Use GenericIPAddressField instead.zfields.E900r%  c                 .    d|d<   t        |   |i | y )N   r~   r   r   r  s      rN   r   zIPAddressField.__init__  s    !|$)&)rM   c                 <    t         |          \  }}}}|d= ||||fS Nr~   r  r  s        rN   r  zIPAddressField.deconstruct  0    #(7#6#8 dD&< T4''rM   c                 >    t         |   |      }|y t        |      S rS   r  r  s     rN   r  zIPAddressField.get_prep_value  r  rM   c                      y)Nr9   rL   rv   s    rN   rV  z IPAddressField.get_internal_type      rM   )rI   rJ   rK   r  ru   r  r   r   r  r  rV  r  r  s   @rN   r9   r9     s<    !N#K% 5$ *(
 rM   r9   c                        e Zd ZdZ ed      Zd ed      iZ	 	 	 	 d fd	Z fdZd Z	 fdZ
d	 Zd
 ZddZ fdZ fdZ xZS )r8   Fz
IP addressr  z#Enter a valid %(protocol)s address.c                     || _         || _        t        j                  ||      | _        d|d<   t        |   ||g|i | y )N'   r~   )unpack_ipv4protocolr   ip_address_validatorsr8  r   r   )rw   rr   r{   r	  r  r  r   r\   s          rN   r   zGenericIPAddressField.__init__  sQ     ' ","B"Bk#
  "|t=d=f=rM   c                 J    g t        |   di | | j                  di |S r   )r   r   _check_blank_and_null_valuesr5  s     rN   r   zGenericIPAddressField.check  s9    
W]$V$
.T..88
 	
rM   c                 l    t        | dd      s&t        | dd      rt        j                  d| d      gS g S )Nre   Frf   zaGenericIPAddressFields cannot have blank=True if null=False, as blank values are stored as nulls.zfields.E150r   )r   r   r   r   s     rN   r  z2GenericIPAddressField._check_blank_and_null_values  sA    tVU+gu0M;$	  	rM   c                     t         |          \  }}}}| j                  dur| j                  |d<   | j                  dk7  r| j                  |d<   |j	                  d      dk(  r|d= ||||fS )NFr  bothr	  r~   r  )r   r  r  r	  r   r  s        rN   r  z!GenericIPAddressField.deconstruct  sy    #(7#6#8 dD&5($($4$4F=!==F"!%F:::l#r)|$T4''rM   c                      y)Nr8   rL   rv   s    rN   rV  z'GenericIPAddressField.get_internal_type  s    &rM   c                     |y t        |t              st        |      }|j                         }d|v r$t        || j                  | j
                  d         S |S )N:r  )r   r   stripr$   r  rl   r   s     rN   r/  zGenericIPAddressField.to_python  s[    =%%JE%<%t'')<)<Y)G  rM   c                 ^    |s| j                  |      }|j                  j                  |      S rS   )r  rP  adapt_ipaddressfield_valuer  s       rN   r  z'GenericIPAddressField.get_db_prep_value  s*    ''.E~~88??rM   c                     t         |   |      }|y |rd|v r	 t        || j                        S t        |      S # t        j
                  $ r Y t        |      S w xY w)Nr  )r   r  r$   r  r   r<  r   r  s     rN   r  z$GenericIPAddressField.get_prep_value  sk    &u-=SE\)%1A1ABB 5z -- 5zs   < AAc                 \    t        |   di | j                  t        j                  d|S )N)r	  r  rL   )r   r  r	  r   r8   r5  s     rN   r  zGenericIPAddressField.formfield  s9    w  
 MM#99 
 	
rM   )NNr  Fr  )rI   rJ   rK   r  ru   r  r1  r   r   r  r  rV  r/  r  r  r  r  r  s   @rN   r8   r8     sd    !L/K'+P)QR >"

('
@
	
 
rM   r8   c                   f     e Zd Z ed       ed      dZ ed      ZddddZ fdZ fd	Z xZ	S )
r<   u9   “%(value)s” value must be either None, True or False.r  z$Boolean (Either True, False or None)zHNullBooleanField is removed except for support in historical migrations.z0Use BooleanField(null=True, blank=True) instead.zfields.E903r%  c                 8    d|d<   d|d<   t        |   |i | y )NTre   rf   r  r  s      rN   r   zNullBooleanField.__init__	  s'    vw$)&)rM   c                 B    t         |          \  }}}}|d= |d= ||||fS )Nre   rf   r  r  s        rN   r  zNullBooleanField.deconstruct	  s6    #(7#6#8 dD&6N7OT4''rM   )
rI   rJ   rK   ru   r1  r  r   r   r  r  r  s   @rN   r<   r<     sO    PQYZ :;K C$ *
( (rM   r<   c                   $     e Zd Z fdZd Z xZS )PositiveIntegerRelDbTypeMixinc                     t        |   di | t        | d      s&t        d | j                  dd  D        d       | _        y y )Ninteger_field_classc              3   @   K   | ]  }t        |t              r|  y wrS   )
issubclassr:   )r   parents     rN   r   zBPositiveIntegerRelDbTypeMixin.__init_subclass__.<locals>.<genexpr>	  s"      !&,7 s   rz   rL   )r   __init_subclass__r   nextr3  r  )r   r   r\   s     rN   r"  z/PositiveIntegerRelDbTypeMixin.__init_subclass__	  sL    !+F+s12&*"%++ab/
 'C# 3rM   c                     |j                   j                  r| j                  |      S | j                         j                  |      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   )r   related_fields_match_typer]  r  rR  s     rN   r_  z)PositiveIntegerRelDbTypeMixin.rel_db_type'	  s?     88<<
++++-555LLrM   )rI   rJ   rK   r"  r_  r  r  s   @rN   r  r  	  s    
MrM   r  c                   4     e Zd Z ed      Zd Z fdZ xZS )r=   zPositive big integerc                      y)Nr=   rL   rv   s    rN   rV  z)PositiveBigIntegerField.get_internal_type9	  s    (rM   c                 *    t        |   di ddi|S Nr  r   rL   r   r  r5  s     rN   r  z!PositiveBigIntegerField.formfield<	  ,    w  
Q
 	
rM   rI   rJ   rK   ru   r  rV  r  r  r  s   @rN   r=   r=   6	  s    *+K)
 
rM   r=   c                   4     e Zd Z ed      Zd Z fdZ xZS )r>   zPositive integerc                      y)Nr>   rL   rv   s    rN   rV  z&PositiveIntegerField.get_internal_typeH	  s    %rM   c                 *    t        |   di ddi|S r*  r+  r5  s     rN   r  zPositiveIntegerField.formfieldK	  r,  rM   r-  r  s   @rN   r>   r>   E	  s    &'K&
 
rM   r>   c                   4     e Zd Z ed      Zd Z fdZ xZS )r?   zPositive small integerc                      y)Nr?   rL   rv   s    rN   rV  z+PositiveSmallIntegerField.get_internal_typeW	  s    *rM   c                 *    t        |   di ddi|S r*  r+  r5  s     rN   r  z#PositiveSmallIntegerField.formfieldZ	  r,  rM   r-  r  s   @rN   r?   r?   T	  s    ,-K+
 
rM   r?   c                   l     e Zd Zej                  gZ ed      Zdddd fd
Z fdZ	d Z
 fd	Z xZS )
r@   zSlug (up to %(max_length)s)2   TF)r~   r   allow_unicodec                |    || _         | j                   rt        j                  g| _        t	        |   |||d| y )N)r~   r   )r6  r   validate_unicode_slugr8  r   r   )rw   r~   r   r6  r  r   r\   s         rN   r   zSlugField.__init__g	  s=     +'1'G'G&HD#$:SFSrM   c                     t         |          \  }}}}|j                  d      dk(  r|d= | j                  du rd|d<   n|d= | j                  dur| j                  |d<   ||||fS )Nr~   r5  Fr   r6  )r   r  r   r   r6  r  s        rN   r  zSlugField.deconstructo	  s}    #(7#6#8 dD&::l#r)|$==E!!&F:z"U*&*&8&8F?#T4''rM   c                      y)Nr@   rL   rv   s    rN   rV  zSlugField.get_internal_type{	  r  rM   c                 \    t        |   di t        j                  | j                  d|S )N)r  r6  rL   )r   r  r   r@   r6  r5  s     rN   r  zSlugField.formfield~	  s9    w  
#oo!%!3!3 
 	
rM   )rI   rJ   rK   r   validate_slugr8  ru   r  r   r  rV  r  r  r  s   @rN   r@   r@   c	  s@    $22312K !#TT
(
 
rM   r@   c                   ~     e Zd Z ed      Zdd fd
Z fdZd Z fdZd Z	d	 Z
 fd
Z fdZ fdZd Z xZS )rC   TextNr  c                2    t        |   |i | || _        y rS   )r   r   r  r  s       rN   r   zTextField.__init__	  s    $)&)(rM   c                 r    |j                  d      xs g }g t        |   di || j                  |      S r  )r   r   r   r  r  s      rN   r   zTextField.check	  sG    JJ{+1r	
W]$V$
%%i0
 	
rM   c                 b   g }|D ]  }t        j                  || j                        s$t        |   }| j                  :d| j                  j
                  j                  v r]|j                  j                  rt|j                  t        j                  d|j                  z  | d              |S )Nsupports_collation_on_textfieldz7%s does not support a database collation on TextFields.r  r   )r   r   r   r   r  rU   r   r   rB  r   r   r   r   r  s        rN   r  zTextField._check_db_collation	  r  rM   c                 D    t         |   |      }| j                  |d<   |S r
  r  r  s      rN   rg  zTextField.db_parameters	  r  rM   c                      y)NrC   rL   rv   s    rN   rV  zTextField.get_internal_type	  r  rM   c                 @    t        |t              s||S t        |      S rS   r  r   s     rN   r/  zTextField.to_python	  r  rM   c                 D    t         |   |      }| j                  |      S rS   r  r  s     rN   r  zTextField.get_prep_value	  r  rM   c                 ~    t        |   di d| j                  i| j                  i ndt        j
                  i|S )Nr~   r  rL   )r   r  r~   ri   r   Textarear5  s     rN   r  zTextField.formfield	  sP     w  
doo12%..7Q 
 	
rM   c                 l    t         |          \  }}}}| j                  r| j                  |d<   ||||fS r  r  r  s        rN   r  zTextField.deconstruct	  r  rM   c                 "    ddl m}  ||||      S r  r   r"  s        rN   r  zTextField.slice_expression	  r#  rM   )rI   rJ   rK   ru   r  r   r   r  rg  rV  r/  r  r  r  r  r  r  s   @rN   rC   rC   	  sA    F)K+/ )
,

%

(1rM   rC   c                        e Zd ZdZ ed       ed      dZ ed      Z	 d fd	Zd Z fdZ	d	 Z
d
 Z fdZ fdZddZd Z fdZ xZS )rD   FuV   “%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] format.u]   “%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an invalid time.)r  invalid_timeTimec                 b    ||c| _         | _        |s|r
d|d<   d|d<   t        |   ||fi | y rK  rL  rM  s         rN   r   zTimeField.__init__	  rN  rM   c                 H   | j                         sg S | j                  }t        |t        j                        rd}nUt        |t        j                        r9t               }t        j                  j                  |j                         |      }ng S | j                  ||      S )rQ  N)r.  )	r  r   r   r*  timer/  combinerB  rF  )rw   r   r.  s      rN   r4  z"TimeField._check_fix_default_value	  s    
 !IeX../Cx}}- "C %%--chhj%@E I))%S)99rM   c                     t         |          \  }}}}| j                  dur| j                  |d<   | j                  dur| j                  |d<   | j                  s| j                  r|d= |d= ||||fS )NFr8  r7  rf   rk   rS  r  s        rN   r  zTimeField.deconstruct
  s~    #(7#6#8 dD&==%!%F:E)%)%6%6F>"==D--wz"T4''rM   c                      y)NrD   rL   rv   s    rN   rV  zTimeField.get_internal_type
  r  rM   c                 l   |y t        |t        j                        r|S t        |t        j                        r|j                         S 	 t        |      }||S 	 t        j                  | j                  d   dd|i      # t        $ r( t        j                  | j                  d   dd|i      w xY w)NrL  r   rC  r  )r   r*  rP  r   r   r   r<  rl   r  s      rN   r/  zTimeField.to_python
  s    =eX]]+LeX../ ::<		&F! " ((	*U#
 	
  	,,##N3#' 	s   B 1B3c                     | j                   s| j                  rG|rEt        j                  j                         j	                         }t        || j                  |       |S t        | !  ||      S rS   )	r8  r7  r*  r.  rP  r~  rw  r   r  r\  s       rN   r  zTimeField.pre_save,
  sX    ==T..3%%))+002ENDLL%8L7#NC88rM   c                 D    t         |   |      }| j                  |      S rS   r  r  s     rN   r  zTimeField.get_prep_value4
  r  rM   c                 ^    |s| j                  |      }|j                  j                  |      S rS   )r  rP  adapt_timefield_valuer  s       rN   r  zTimeField.get_db_prep_value8
  rd  rM   c                 L    | j                  |      }|dS |j                         S rf  rg  ri  s      rN   r  zTimeField.value_to_string>
  rk  rM   c                 F    t        |   di dt        j                  i|S rm  )r   r  r   rD   r5  s     rN   r  zTimeField.formfieldB
  rn  rM   ro  r  )rI   rJ   rK   r  ru   r1  r  r   r4  r  rV  r/  r  r  r  r  r  r  r  s   @rN   rD   rD   	  sv    !*
 ?
	 F)K JO7:,	(
89%;6
 
rM   rD   c                   h     e Zd Z ej                         gZ ed      Zd fd	Z fdZ	 fdZ
 xZS )rE   URLc                 L    |j                  dd       t        |   ||fi | y Nr~      r  )rw   rr   r{   r   r\   s       rN   r   zURLField.__init__O
  s'    ,,t6v6rM   c                 d    t         |          \  }}}}|j                  d      dk(  r|d= ||||fS r^  )r   r  r   r  s        rN   r  zURLField.deconstructS
  sA    #(7#6#8 dD&::l#s*|$T4''rM   c                 F    t        |   di dt        j                  i|S rm  )r   r  r   rE   r5  s     rN   r  zURLField.formfieldY
  s2     w  
enn
 	
rM   r  )rI   rJ   rK   r   URLValidatorr8  ru   r  r   r  r  r  r  s   @rN   rE   rE   K
  s4    1*1134E(K7(
 
rM   rE   c                   ~     e Zd Z ed      ZddgZ fdZ fdZd Z fdZ	d Z
d	 Z fd
Zd fd	Zd Zd Z xZS )r+   zRaw binary dataNrM   c                     |j                  dd       t        |   |i | | j                  9| j                  j                  t	        j                  | j                               y y )Nrk   F)r  r   r   r~   r   r   r  r  s      rN   r   zBinaryField.__init__h
  sU    *e,$)&)??&OO"":#@#@#QR 'rM   c                 F    g t        |   di || j                         S r   )r   r   _check_str_default_valuer5  s     rN   r   zBinaryField.checkn
  s(    K((K4+H+H+JKKrM   c                     | j                         r3t        | j                  t              rt	        j
                  d| d      gS g S )NzDBinaryField's default cannot be a string. Use bytes content instead.zfields.E170r   )r  r   r   r   r   r   rv   s    rN   rf  z$BinaryField._check_str_default_valueq
  sC    *T\\3"?'$	  	rM   c                 `    t         |          \  }}}}| j                  rd|d<   n|d= ||||fS )NTrk   )r   r  rk   r  s        rN   r  zBinaryField.deconstruct}
  sA    #(7#6#8 dD&==!%F:z"T4''rM   c                      y)Nr+   rL   rv   s    rN   rV  zBinaryField.get_internal_type
  s    rM   c                 8    |j                   j                  |      S rS   )rP  binary_placeholder_sql)rw   r   r   r   s       rN   get_placeholderzBinaryField.get_placeholder
  s    ~~44U;;rM   c                     | j                         r!t        | j                        s| j                  S t        |          }|dk(  ry|S )NrQ   rM   )r  r   r   r   r+  )rw   r   r\   s     rN   r+  zBinaryField.get_default
  s@    ht||&<<<'%'b=rM   c                 d    t         |   |||      }||j                  j                  |      S |S rS   )r   r  DatabaseBinaryr  s       rN   r  zBinaryField.get_db_prep_value
  s8    )%XF&&--e44rM   c                 T    t        | j                  |            j                  d      S )z#Binary data is serialized as base64ascii)r   r  decoder"  s     rN   r  zBinaryField.value_to_string
  s#    //45<<WEErM   c                 l    t        |t              r#t        t        |j	                  d                  S |S )Nrr  )r   r   
memoryviewr   encoder   s     rN   r/  zBinaryField.to_python
  s*    eS!iW(=>??rM   r  )rI   rJ   rK   ru   r  r;  r   r   rf  r  rV  rl  r+  r  r  r/  r  r  s   @rN   r+   r+   d
  sL    %&K#;LSL
(<FrM   r+   c                   z     e Zd Zd ed      iZ ed      ZdZd fd	Z fdZd Z	 fdZ
dd	Zd
 Z fdZ xZS )rF   r  u$   “%(value)s” is not a valid UUID.zUniversally unique identifierFc                 0    d|d<   t        |   |fi | y )N    r~   r  )rw   rr   r   r\   s      rN   r   zUUIDField.__init__
  s    !|00rM   c                 <    t         |          \  }}}}|d= ||||fS r   r  r  s        rN   r  zUUIDField.deconstruct
  r  rM   c                      y)NrF   rL   rv   s    rN   rV  zUUIDField.get_internal_type
  r  rM   c                 D    t         |   |      }| j                  |      S rS   r  r  s     rN   r  zUUIDField.get_prep_value
  r  rM   c                     |y t        |t        j                        s| j                  |      }|j                  j
                  r|S |j                  S rS   )r   uuidUUIDr/  r   has_native_uuid_fieldhexr  s       rN   r  zUUIDField.get_db_prep_value
  sD    =%+NN5)E44LyyrM   c                 
   |Ft        |t        j                        s,t        |t              rdnd}	 t        j                  di ||iS |S # t        t
        f$ r( t        j                  | j                  d   dd|i      w xY w)Nr  r  r  r   rC  rL   )	r   r~  r  r  r}  r   r   r<  rl   )rw   r   
input_forms      rN   r/  zUUIDField.to_python
  s    Ztyy%A",UC"8eJyy7J#677  #J/  00''	2"#U+ s   A 7Bc                 F    t        |   di dt        j                  i|S rm  )r   r  r   rF   r5  s     rN   r  zUUIDField.formfield
  rn  rM   rS   r  )rI   rJ   rK   ru   r1  r  r  r   r  rV  r  r  r/  r  r  r  s   @rN   rF   rF   
  sQ    1;< 34K!1(
%
 
rM   rF   c                   Z     e Zd ZdZ fdZ fdZd Z fdZd Zd
dZ	 fdZ
d	 Z xZS )AutoFieldMixinTc                 .    d|d<   t        |   |i | y )NTrf   r  r  s      rN   r   zAutoFieldMixin.__init__
  s    w$)&)rM   c                 F    g t        |   di || j                         S r   )r   r   _check_primary_keyr5  s     rN   r   zAutoFieldMixin.check
  s2    
W]$V$
$$&
 	
rM   c                 P    | j                   st        j                  d| d      gS g S )Nz%AutoFields must set primary_key=True.zfields.E100r   )r}   r   r   rv   s    rN   r  z!AutoFieldMixin._check_primary_key
  s1    ;$  IrM   c                 F    t         |          \  }}}}|d= d|d<   ||||fS )Nrf   Tr}   r  r  s        rN   r  zAutoFieldMixin.deconstruct
  s9    #(7#6#8 dD&7O $}T4''rM   c                      y rS   rL   rL  s      rN   rJ  zAutoFieldMixin.validate
  s    rM   c                 b    |s,| j                  |      }|j                  j                  |      }|S rS   )r  rP  validate_autopk_valuer  s       rN   r  z AutoFieldMixin.get_db_prep_value
  s.    ''.ENN88?ErM   c                     |j                   j                  r"t        d|j                   j                  z        t	        |   ||fi | | |j                   _        y )Nz7Model %s can't have more than one auto-generated field.)rU   
auto_fieldr   r   r   r  r`  s       rN   r  z"AutoFieldMixin.contribute_to_class  sR    99I))//"  	#C88#		rM   c                      y rS   rL   r   s     rN   r  zAutoFieldMixin.formfield  s    rM   r  )rI   rJ   rK   rs  r   r   r  r  rJ  r  r  r  r  r  s   @rN   r  r  
  s0    L*

($rM   r  c                   <     e Zd ZdZed        Z fdZ fdZ xZS )AutoFieldMetaa  
    Metaclass to maintain backward inheritance compatibility for AutoField.

    It is intended that AutoFieldMixin become public API when it is possible to
    create a non-integer automatically-generated field using column defaults
    stored in the database.

    In many areas Django also relies on using isinstance() to check for an
    automatically-generated field as a subclass of AutoField. A new flag needs
    to be implemented on Field to be used instead.

    When these issues have been addressed, this metaclass could be used to
    deprecate inheritance from AutoField and use of isinstance() with AutoField
    for detecting automatically-generated fields.
    c                     t         t        fS rS   )r)   rA   rv   s    rN   _subclasseszAutoFieldMeta._subclasses!  s    n--rM   c                 R    t        || j                        xs t        |   |      S rS   )r   r  r   __instancecheck__)rw   r,  r\   s     rN   r  zAutoFieldMeta.__instancecheck__%  ,    (D$4$45 
9R:
 	
rM   c                 R    t        || j                        xs t        |   |      S rS   )r   r  r   __subclasscheck__)rw   subclassr\   s     rN   r  zAutoFieldMeta.__subclasscheck__*  r  rM   )	rI   rJ   rK   r  r  r  r  r  r  r  s   @rN   r  r    s+      . .


 
rM   r  c                       e Zd Zd Zd Zy)r'   c                      y)Nr'   rL   rv   s    rN   rV  zAutoField.get_internal_type1  r  rM   c                 6    t               j                  |      S Nr%  )r:   r]  rR  s     rN   r_  zAutoField.rel_db_type4  s    ~%%%<<rM   NrI   rJ   rK   rV  r_  rL   rM   rN   r'   r'   0  s    =rM   r'   )	metaclassc                       e Zd Zd Zd Zy)r)   c                      y)Nr)   rL   rv   s    rN   rV  zBigAutoField.get_internal_type9  r  rM   c                 6    t               j                  |      S r  )r*   r]  rR  s     rN   r_  zBigAutoField.rel_db_type<  s     ((J(??rM   Nr  rL   rM   rN   r)   r)   8  s    @rM   r)   c                       e Zd Zd Zd Zy)rA   c                      y)NrA   rL   rv   s    rN   rV  z SmallAutoField.get_internal_typeA  r  rM   c                 6    t               j                  |      S r  )rB   r]  rR  s     rN   r_  zSmallAutoField.rel_db_typeD  s     "**j*AArM   Nr  rL   rM   rN   rA   rA   @  s     BrM   rA   )ir  r*  r  r  r~  r~  base64r   r   collections.abcr   	functoolsr   r   djangor   django.appsr	   django.confr
   django.corer   r   r   	django.dbr   r   r   django.db.models.constantsr   django.db.models.query_utilsr   r   django.db.utilsr   django.utilsr   django.utils.choicesr   r   r   r   django.utils.datastructuresr   django.utils.dateparser   r   r   r   django.utils.durationr    r!   django.utils.functionalr"   r#   django.utils.ipv6r$   django.utils.textr%   django.utils.translationr&   ru   __all__r4   r;   r(   rZ   r_   ra   r5   r,   r-   r.   r,  r/  r1  r/   r0   r1   r2   r3   r6   r7   r:   r*   rB   r9   r8   r<   r  r=   r>   r?   r@   rC   rD   rE   r+   rF   r  rd  r  r'   r)   rA   rL   rM   rN   <module>r     s         ' $ 3     6 6 5 5 1 O - !  4  I < 0 & 6!H	 		 	 '' M( GH GH GHT +;5 +;\t1 t1n  %F FRD
"E D
NJ
I J
ZX
5 X
v>
E >
B
 
4IE IX'
 '
Ta
5 a
H
l 
"# # U  >X
E X
v(| (6M M8
;_ 

8, 

 =?P 
"
	 "
JJ1 J1Zs
"E s
l
y 
2=% =@4
 4
n2 2j
D 
@= =@>? @B^%6 BrM   