o
    <g<                    @   s  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l7m8Z8m9Z9 d dl:m;Z; d dl<m=Z> g dZ?G dd dZ@G dd dZAdgZBdd ZCdd ZDd d! ZEeG d"d# d#e ZFG d$d% d%eFZGG d&d' d'eFZHG d(d) d)eHZId*d+ ZJd,d- ZKG d.d/ d/ZLG d0d1 d1eLeFZMG d2d3 d3eMZNG d4d5 d5eFZOG d6d7 d7eFZPG d8d9 d9eHZQG d:d; d;eFZRG d<d= d=eFZSG d>d? d?eFZTG d@dA dAeTZUG dBdC dCeTZVG dDdE dEeFZWG dFdG dGeFZXG dHdI dIeGZYG dJdK dKZZG dLdM dMeZeUZ[G dNdO dOeZeTZ\G dPdQ dQeZeVZ]G dRdS dSeHZ^G dTdU dUeFZ_G dVdW dWeLeFZ`G dXdY dYeHZaG dZd[ d[eFZbG d\d] d]eFZcG d^d_ d_ZdG d`da daeeZfG dbdc dcedeTefddZgG dedf dfedeUZhG dgdh dhedeVZidS )i    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)MAX_IPV6_ADDRESS_LENGTH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dS )r4   N__name__
__module____qualname__ rL   rL   S/var/www/html/venv/lib/python3.10/site-packages/django/db/models/fields/__init__.pyr4   K       r4   c                   @   rG   )r;   NrH   rL   rL   rL   rM   r;   O   rN   r;   ) z	---------c                 C   s   t | |j|S N)r   	get_model_meta	get_field)	app_label
model_name
field_namerL   rL   rM   _load_fieldX   s   rW   c                 C   s   t  }| |_|S rP   )r4   	__class__)of_clsnewrL   rL   rM   _emptyl   s   r[   c                   C      d S rP   rL   rL   rL   rL   rM   return_Noner      r]   c                       s  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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dZ fddZdd Z dd Z!dd Z"e#dd Z$dd Z%dd d!Z&d"d# Z'dd$d%Z(d&d' Z)dd(d)Z*d*d+ Z+d,d- Z,dd.d/Z-ed0d1 Z.e.j/d2d1 Z.e0d3d4 Z1d5d6 Z2d7d8 Z3d9d: Z4d;d< Z5d=d> Z6d?d@ Z7dAdB Z8dCdD Z9dEdF Z:dGdH Z;dIdJ Z<e0dKdL Z=e0dMdN ZdOdP Z>dQdR Z?dSdT Z@dUdV ZAdWdX ZBdYdZ ZCd[d\ ZDd]d^ ZEd_d` ZFdadb ZGdcdd ZHe0dedf ZIedgdh ZJedidj ZKdkdl ZLddmdnZMdodp ZNdqdr ZOdsdt ZPdudv ZQdwdx ZRdydz ZSdd{d|ZTd}d~ ZUdd ZVdd ZWe0dd ZXe0dd ZYdeZddfddZ[dd Z\edd Z]dd Z^dddZ_dd Z`dd Za  ZbS )r5   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)rb   choices	db_columneditableerror_messages	help_textlimit_choices_to	on_deleterelated_namerelated_query_namer   verbose_nameFc                 C   s   t dd| jji S )NzField of type: %(field_type)s
field_type)_rX   rI   selfrL   rL   rM   _description   s   zField._descriptionrO   rL   c                 C   s   || _ || _|| _|| _||| _| _||| _| _|	| _| jd u| _	|
| _
|| _|| _|| _|| _|| _|| _|| _|| _|| _|| _|| _|| _|| _|r[tj| _t jd8  _ntj| _t jd7  _t|| _|| _d S )N   )namern   _verbose_nameprimary_key
max_length_uniquerb   ra   remote_fieldis_relationdefault
db_defaultrg   	serializerd   unique_for_monthunique_for_yearre   ri   db_indexrf   
db_comment_db_tablespaceauto_createdr5   auto_creation_countercreation_counterlist_validators_error_messages)rr   rn   ru   rw   rx   rc   rb   ra   r   relr|   rg   r~   rd   r   r   re   ri   rf   db_tablespacer   r   rh   r   r}   rL   rL   rM   __init__   s:   

zField.__init__c                    s,   t | ds
t  S | j}d|jj| jf S )zb
        Return "app_label.model_label.field_name" for fields attached to
        models.
        model%s.%s)hasattrsuper__str__r   rR   labelru   )rr   r   rX   rL   rM   r      s   

zField.__str__c                 C   s<   d| j j| j jf }t| dd}|durd||f S d| S )z1Display the module, class, and name of the field.r   ru   Nz<%s: %s>z<%s>)rX   rJ   rK   getattr)rr   pathru   rL   rL   rM   __repr__  s
   zField.__repr__c                 K   sd   g |   |  | jdi ||  | jdi ||  | jdi ||  |  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rr   kwargsrL   rL   rM   check
  s&   	zField.checkc                 C   sl   | j du rg S | j drtjd| ddgS t| j v r&tjdt | ddgS | j dkr4tjd	| 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".
        Nrp   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)ru   endswithr
   Errorr   rq   rL   rL   rM   r     s0   


zField._check_field_namec                 C   s   t |ttfpt |t S rP   )
isinstancestrr!   r   )clsvaluerL   rL   rM   _choices_is_value9  s   zField._choices_is_valuec              
      s\   j sg S t j trt j trtjd ddgS d} j D ]n}z|\}}W n ttfy3   Y  nrw z#t fdd|D sCW  nb j	d urV|rVt
|gdd |D }W n. ttfy   ||}} |ro |srY  n3 j	d urt|trt
|t|}Y nw t|tr nq j	d ur| j	krtjd|  d	dgS g S tjd
 ddgS )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   s(    | ]\}}  |o  |V  qd S rP   )r   ).0r   
human_namerq   rL   rM   	<genexpr>T  s
    
z'Field._check_choices.<locals>.<genexpr>c                 s   s&    | ]\}}t |trt|V  qd S rP   )r   r   len)r   r   rp   rL   rL   rM   r   ]  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)re   r   r   r   r
   r   	TypeError
ValueErrorallrx   maxr   r   )rr   choice_max_lengthchoices_group
group_namegroup_choicesr   r   rL   rq   rM   r   =  sx   	



zField._check_choicesc                 K   s   ddl m} | jtu st| j|s|d u rg S g }|D ]F}t|| js%qt| }t	| j
ddsE|jjrE| j d}|tj|| dd |jjsad| jjjv sa|j d	}|tj|| d
d q|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   rR   required_db_featuresdisplay_name)rr   	databasesr   r   errorsdbr   msgrL   rL   rM   r     s4   


zField._check_db_defaultc                 C   s    | j dvrtjd| ddgS g S )N)NTFz''db_index' must be None, True or False.zfields.E006r   )r   r
   r   rq   rL   rL   rM   r     s   
zField._check_db_indexc                 K   sl   | j r|sg S g }|D ](}t|| jsqt| }|jjs3d| jjjv s3|	t
j|j d| dd q|S )Nsupports_commentsz3 does not support comments on columns (db_comment).zfields.W163r   )r   r   r   r   r   r   r   rR   r   r   r
   Warningr   )rr   r   r   r   r   r   rL   rL   rM   r     s&   

zField._check_db_commentc                 C   s,   | j r| jrtjjstjd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   )rw   ra   r   r   !interprets_empty_strings_as_nullsr
   r   rq   rL   rL   rM   r     s   	z*Field._check_null_allowed_for_primary_keysc                 K   sJ   |d u rg S g }|D ]}t || jr"|t| jj| fi | q
|S rP   )r   r   r   extendr   
validationcheck_field)rr   r   r   r   aliasrL   rL   rM   r     s   z$Field._check_backend_specific_checksc              	   C   sJ   g }t | jD ]\}}t|s"|tjddj|t|d| dd q|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   )rr   r   r   	validatorrL   rL   rM   r     s"   zField._check_validatorsc                 C   s   | j d ur!tj| j dd| jj | j d| | j dddgS | jd urBtj| jdd| jj | jd| | jd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   getrX   rI   system_check_deprecated_detailsr   rq   rL   rL   rM   r     s0   




z Field._check_deprecation_detailsc                 C   s<   || j jjkr|d u s|| kr| jS ddlm} ||| |S Nr   )Col)r   rR   db_table
cached_colr   r   )rr   r   output_fieldr   rL   rL   rM   get_col  s
   zField.get_colc                 C      | j S rP   )_choicesrq   rL   rL   rM   re   !  s   zField.choicesc                 C   s   t || _d S rP   )r   r   rr   r   rL   rL   rM   re   %     c                 C   s   ddl m} || jjj| S r   )r   r   r   rR   r   )rr   r   rL   rL   rM   r   )  s   zField.cached_colc                 C   s   ||fS )z
        Custom format for select clauses. For example, GIS columns need to be
        selected as AsText(table.col) on MySQL as the table.col data can't be
        used by Django.
        rL   )rr   compilersqlparamsrL   rL   rM   select_format/  s   zField.select_formatc           	      C   s  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}| D ]*\}}t| |||}t|trd|j}||v rq||krp|||< qO||ury|||< qOd| jj| jj	f }|
dr|dd }n;|
d!r|d!d }n/|
d"r|d"d }n#|
d#r|d#d }n|
d$r|d$d }n|
d%r|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.
        rn   Nrw   Frx   rc   rb   ra   r   r|   r}   rg   Tr~   rd   r   r   re   ri   rO   rf   )r   r   r   r   rh   ry   r   r   rv   r   )rc   rh   r   rn   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   funcrX   rJ   rK   
startswithreplaceru   )	rr   keywords	possiblesattr_overridesequals_comparisonru   r|   r   r   rL   rL   rM   deconstruct7  s   !	







zField.deconstructc                 C   s    |   \}}}}| j|i |S )z
        Uses deconstruct() to clone a new copy of this Field.
        Will not preserve any class attachments/attribute names.
        )r   rX   rr   ru   r   argsr   rL   rL   rM   clone  s   zField.clonec                 C   s2   t |tr| j|jkot| dd t|dd kS tS Nr   )r   r5   r   r   NotImplementedrr   otherrL   rL   rM   __eq__  s   

zField.__eq__c                 C   s   t |tr?| j|jkst| dst|ds| j|jk S t| dt|dk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   rR   rT   rU   r   r   rL   rL   rM   __lt__  s   
zField.__lt__c                 C   s
   t | jS rP   )hashr   rq   rL   rL   rM   __hash__  s   
zField.__hash__c                 C   sN   t  | }| jrt  | j|_t| jdr| jj| u r||j_||t| < |S )Nfield)copyrz   r   r   r   )rr   memodictr   rL   rL   rM   __deepcopy__  s   
zField.__deepcopy__c                 C   s   t  }| j|_| j |_|S rP   )r4   rX   __dict__r   rr   r   rL   rL   rM   __copy__  s   zField.__copy__c                 C   sJ   t | ds| 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[   rX   rW   r   rR   rT   object_nameru   )rr   staterL   rL   rM   
__reduce__  s   

zField.__reduce__c                 C   s   | j r|  S dS )a  
        Hook to generate new PK values on save. This method is called when
        saving instances with no primary key value set. If this method returns
        something else than None, then the returned value is used when saving
        the new instance.
        N)r|   get_defaultrr   instancerL   rL   rM   get_pk_value_on_save  s   zField.get_pk_value_on_savec                 C   s   |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   rL   rL   rM   	to_python  s   zField.to_pythonc                 C   s<   i }t | jjD ]}|t|di  q|| jpi  |S )Ndefault_error_messages)reversedrX   __mro__updater   r   )rr   messagescrL   rL   rM   rh     s
   zField.error_messagesc                 C   s   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   rq   rL   rL   rM   r     s   zField.validatorsc                 C   s   || j v rd S g }| jD ]3}z|| W q tjy? } zt|dr/|j| jv r/| j|j |_||j	 W Y d }~qd }~ww |rGt|d S )Ncode)
empty_valuesr   r   ValidationErrorr   r  rh   messager   
error_list)rr   r   r   verL   rL   rM   run_validators	  s   


zField.run_validatorsc                 C   s   | j sdS | jdurB|| jvrB| jD ]"\}}t|ttfr-|D ]\}}||kr+  dS qq||kr4 dS qtj| jd dd|id|du rS| j	sStj| jd dd| j
se|| jv rgtj| jd dddS dS )z
        Validate value and raise ValidationError if necessary. Subclasses
        should override this to provide validation logic.
        Nr`   r   r  r   ra   )r  rb   )rg   re   r  r   r   tupler   r  rh   ra   rb   )rr   r   model_instance
option_keyoption_valueoptgroup_keyoptgroup_valuerL   rL   rM   validate  s.   zField.validatec                 C   s$   |  |}| || | | |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  r%  r  rr   r   r   rL   rL   rM   clean8  s   

zField.cleanc                 C   s   t | j|jjdS )Nqn_)r   r  ops
quote_namerr   r   rL   rL   rM   db_type_parametersC     zField.db_type_parametersc                 C   s4   |  |}z
|j|   | W S  ty   Y dS 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)r,  data_type_check_constraintsget_internal_typeKeyError)rr   r   datarL   rL   rM   db_checkF  s   
zField.db_checkc                 C   sJ   |  |}z	|j|   }W n
 ty   Y dS w t|r!||S || S )zk
        Return the database column data type for this field, for the provided
        connection.
        N)r,  
data_typesr/  r0  r   )rr   r   r1  column_typerL   rL   rM   db_typeT  s   
zField.db_typec                 C   s
   |  |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.
        )r5  r+  rL   rL   rM   rel_db_types  s   
zField.rel_db_typec                 C   s.   |j j|  }|r|| | S | |S )z3Return the data type to use in the Cast() function.)r)  cast_data_typesr   r/  r,  r5  )rr   r   r5  rL   rL   rM   cast_db_type{  s   
zField.cast_db_typec                 C   s   |  |}| |}||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   )r5  r2  )rr   r   type_stringcheck_stringrL   rL   rM   db_parameters  s
   

zField.db_parametersc                 C   s   |j |  S rP   )data_types_suffixr   r/  r+  rL   rL   rM   db_type_suffix  s   zField.db_type_suffixc                 C   s   t | dr	| jgS g S )Nfrom_db_value)r   r?  r+  rL   rL   rM   get_db_converters  s   
zField.get_db_convertersc                 C   s   | j p| jS rP   )ry   rw   rq   rL   rL   rM   rc        zField.uniquec                 C   s   | j ptjS rP   )r   r	   DEFAULT_INDEX_TABLESPACErq   rL   rL   rM   r     rA  zField.db_tablespacec                 C   s   | j tuotjjS )z6Private API intended only to be used by Django itself.)r}   r;   r   r   can_return_columns_from_insertrq   rL   rL   rM   db_returning  s   
zField.db_returningc                 C   sT   | j p|| _ |  \| _| _| jd u| _| jd u r&| j r(| j dd| _d S d S d S )Nrp    )ru   get_attname_columnattnamecolumnconcretern   r   )rr   ru   rL   rL   rM   set_attributes_from_name  s   zField.set_attributes_from_namec                 C   s|   |  | || _|jj| |d | jrt|| j| |  | jdur:d| j	 |j
vr<t|d| j	 t|j| d dS dS dS )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   )rJ  r   rR   	add_fieldrH  setattrrG  descriptor_classre   ru   r  r   _get_FIELD_display)rr   r   ru   private_onlyrL   rL   rM   contribute_to_class  s   

zField.contribute_to_classc                 C   s   | 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.
        )ru   r   rG  r  rL   rL   rM   get_filter_kwargs_for_object  s   z"Field.get_filter_kwargs_for_objectc                 C   r   rP   )ru   rq   rL   rL   rM   get_attname  s   zField.get_attnamec                 C   s   |   }| jp|}||fS rP   )rS  rf   )rr   rG  rH  rL   rL   rM   rF    s   
zField.get_attname_columnc                 C   s   | j jS rP   )rX   rI   rq   rL   rL   rM   r/    s   zField.get_internal_typec                 C      t || jS )z(Return field's value just before saving.r   rG  )rr   r   addrL   rL   rM   pre_save  rA  zField.pre_savec                 C   s   t |tr	| }|S )zAPerform preliminary non-db specific value checks and conversions.)r   r!   _proxy____castr   rL   rL   rM   get_prep_value  s   
zField.get_prep_valuec                 C   s   |s|  |}|S )z
        Return field's value prepared for interacting with the database backend.

        Used by the default implementations of get_db_prep_save().
        )rY  rr   r   r   preparedrL   rL   rM   get_db_prep_value  s   
zField.get_db_prep_valuec                 C   s   t |dr|S | j||ddS )z9Return field's value prepared for saving into a database.as_sqlF)r   r[  )r   r\  rr   r   r   rL   rL   rM   get_db_prep_save  s   
zField.get_db_prep_savec                 C   s
   | j tuS )z;Return a boolean of whether this field has a default value.)r|   r;   rq   rL   rL   rM   has_default  s   
zField.has_defaultc                 C   s   |   S )z(Return the default value for this field.)r  rq   rL   rL   rM   r
       zField.get_defaultc                    sd     rtjrjS fddS jtur$ddlm   fddS jr.jr0t	j
js0tS tS )Nc                      s    j S rP   )r|   rL   rq   rL   rM   <lambda>  s    z$Field._get_default.<locals>.<lambda>r   )DatabaseDefaultc                      s    j dS )N)r   )r   rL   rc  rr   rL   rM   rb    s    )r`  r   r|   r}   r;   r   rc  empty_strings_allowedra   r   r   r   r]   r   rq   rL   rd  rM   r    s   

zField._get_defaultc                 C   s2   | j }|turt|dsddlm} ||| }|S )Nresolve_expressionr   r   )r}   r;   r   r   r   )rr   r}   r   rL   rL   rM   r     s   

zField._db_default_expressionc                    s   | j dur|rt| j |S | j S | jj}|p|  }tt| jdr(| j j	nd |j
|}|r8|j| }|r<|ng  fdd|D  S )z{
        Return choices with a default blank choices included, for use
        as <select> choices for this field.
        Nget_related_fieldr   c                    s   g | ]
} |t |fqS rL   )r   )r   xchoice_funcrL   rM   
<listcomp>4  s    z%Field.get_choices.<locals>.<listcomp>)re   r   rz   r   get_limit_choices_tooperator
attrgetterr   rg  rG  _default_managercomplex_filterorder_by)rr   include_blankblank_choicerj   ordering	rel_modelqsrL   ri  rM   get_choices  s"   


zField.get_choicesc                 C   s   t | |S )z
        Return a string value of this field from the passed obj.
        This is used by the serialization framework.
        )r   value_from_objectr  rL   rL   rM   value_to_string8  s   zField.value_to_stringc                 C   s   t t| jS )z#Flattened version of choices tuple.)r   r   re   rq   rL   rL   rM   flatchoices?  s   zField.flatchoicesc                 C   s   t || j| d S rP   )rM  ru   )rr   r  r1  rL   rL   rM   save_form_dataD  r-  zField.save_form_datac                 K   s   | j  t| j| jd}|  r%t| jr| j|d< d|d< n|  |d< | jdurb| j p5|  p4d|v  }| j	|d|d< | j
|d< | jrJd|d	< |durQ|}ntj}t|D ]	}|d
vra||= qX|| |du rntj}|di |S )z4Return a django.forms.Field instance for this field.)requiredr   ri   initialTshow_hidden_initialNrr  re   coerceempty_value)r  r  re   r|  widgetr   r}  ri   rh   r~  disabledrL   )rb   r%   rn   ri   r`  r   r|   r
  re   rw  r  ra   r   TypedChoiceFieldr   r  r-   )rr   
form_classchoices_form_classr   defaultsrr  krL   rL   rM   	formfieldG  s8   





zField.formfieldc                 C   rT  )z;Return the value of this field in the given model instance.rU  r  rL   rL   rM   rx  x  rA  zField.value_from_objectc                 C   s   t d)zReturn a slice of this field.z$This field does not support slicing.r   )rr   
expressionstartlengthrL   rL   rM   slice_expression|  ra  zField.slice_expressionrP   FNN)crI   rJ   rK   __doc__re  r   r   EMPTY_VALUESr  r   r   r  rp   r  r   r   non_db_attrshiddenmany_to_manymany_to_oneone_to_many
one_to_onerelated_model	generatedr   rN  rs   propertydescriptionr;   r   r   r   r   r   classmethodr   r   r   r   r   r   r   r   r   r   re   setterr"   r   r   r   r   r   r   r   r  r  r	  r  r  rh   r  r%  r'  r,  r2  r5  r6  r8  r<  r>  r@  rc   r   rD  rJ  rQ  rR  rS  rF  r/  rW  rY  r\  r_  r`  r
  r  r   r(   rw  ry  rz  r{  r  rx  r  __classcell__rL   rL   r   rM   r5   v   s   

>
"

I!

	
	


^












1r5   c                       sV   e Zd ZdZededdZedZdd Zdd	 Z fd
dZ	 fddZ
  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                 C      dS )Nr,   rL   rq   rL   rL   rM   r/    r^   zBooleanField.get_internal_typec                 C   s`   | j r
|| jv r
d S |dv rt|S |dv rdS |dv rdS tj| j| j r'dnd dd|id	)
N)TF)tTrue1T)fFalse0Fr  r  r   r  )ra   r  boolr   r  rh   r   rL   rL   rM   r    s   zBooleanField.to_pythonc                    s"   t  |}|d u rd S | |S rP   r   rY  r  r   r   rL   rM   rY    s   
zBooleanField.get_prep_valuec                    sd   | j d ur|  pd|v  }d| j|di}n| jrtjntj}|dd}t jdi i ||S )Nr}  re   r  F)r  r|  rL   )	re   r`  rw  ra   r   r<   r,   r   r  )rr   r   rr  r  r  r   rL   rM   r    s   

zBooleanField.formfield)rI   rJ   rK   re  rp   r  r  r/  r  rY  r  r  rL   rL   r   rM   r,     s    r,   c                       s   e Zd Zdd fdd
Zedd Z fddZd	d
 Zdd Z fddZ	 fddZ
dd Zdd Z fddZ fddZ fddZdd Z  ZS )r-   Ndb_collationc                   s>   t  j|i | || _| jd ur| jt| j d S d S rP   )r   r   r  rx   r   r   MaxLengthValidatorrr   r  r   r   r   rL   rM   r     s
   
zCharField.__init__c                 C   s   | j d ur	tdS tdS )NzString (up to %(max_length)s)zString (unlimited))rx   rp   rq   rL   rL   rM   r    s   
zCharField.descriptionc                    s>   | dpg }g t jdi || || jdi |S Nr   rL   )r   r   r   _check_db_collation_check_max_length_attributerr   r   r   r   rL   rM   r     s   zCharField.checkc                 K   sn   | j d u rtjjsd| jjjv rg S tjd| ddgS t	| j t
r,t	| j ts,| j dkr5tjd| 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)rx   r   r   r  r   rR   r   r
   r   r   intr  r   rL   rL   rM   r    s2   



z%CharField._check_max_length_attributec                 C   f   g }|D ],}t || jsqt| }| jd u s0d| jjjv s0|jjs0|	t
jd|j | dd q|S )Nsupports_collation_on_charfieldz7%s does not support a database collation on CharFields.fields.E190r   )r   r   r   r   r  rR   r   r   r  r   r
   r   r   rr   r   r   r   r   rL   rL   rM   r    ,   
zCharField._check_db_collationc                    s   | j d u r	|jjS t |S rP   )rx   r)  "cast_char_field_without_max_lengthr   r8  r+  r   rL   rM   r8    s   
zCharField.cast_db_typec                       t  |}| j|d< |S N	collationr   r<  r  rr   r   	db_paramsr   rL   rM   r<       
zCharField.db_parametersc                 C   r  )Nr-   rL   rq   rL   rL   rM   r/    r^   zCharField.get_internal_typec                 C      t |ts	|d u r|S t|S rP   r   r   r   rL   rL   rM   r       zCharField.to_pythonc                       t  |}| |S rP   r  r   r   rL   rM   rY       
zCharField.get_prep_valuec                    s<   d| j i}| jrtjjsd |d< || t jdi |S )Nrx   r  rL   )rx   ra   r   r   r   r  r   r  )rr   r   r  r   rL   rM   r    s
   

zCharField.formfieldc                    .   t   \}}}}| jr| j|d< ||||fS Nr  r   r   r  r   r   rL   rM   r        
zCharField.deconstructc                 C      ddl m} ||||S Nr   )Substrdjango.db.models.functionsr  rr   r  r  r  r  rL   rL   rM   r        zCharField.slice_expression)rI   rJ   rK   r   r  r  r   r  r  r8  r<  r/  r  rY  r  r   r  r  rL   rL   r   rM   r-     s    
r-   c                   @   s(   e Zd ZejgZedZddddZdS )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_listr  rp   r  r   rL   rL   rL   rM   r.   &  s    
r.   c                 C   s   t | rt | tj j} | S rP   )r   is_aware
make_naivedatetimeutc)r   rL   rL   rM   	_to_naive6  s   
r  c                   C   s   t t S rP   )r  r   nowrL   rL   rL   rM   _get_naive_now<     r  c                       s6   e Zd Z fddZdd Zdd Zd
dd	Z  ZS )DateTimeCheckMixinc                    s&   g t  jdi ||  |  S r   )r   r   !_check_mutually_exclusive_options_check_fix_default_valuer   r   rL   rM   r   A  s   zDateTimeCheckMixin.checkc                 C   sD   | j | j|  g}dd |D d}|dkr tjd| ddgS g S )Nc                 S   s   g | ]}|d vqS ))NFrL   )r   optionrL   rL   rM   rk  Q  s    zHDateTimeCheckMixin._check_mutually_exclusive_options.<locals>.<listcomp>Trt   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   )rr   mutually_exclusive_optionsenabled_optionsrL   rL   rM   r  H  s"   
z4DateTimeCheckMixin._check_mutually_exclusive_optionsc                 C   s   g S rP   rL   rq   rL   rL   rM   r  a  r^   z+DateTimeCheckMixin._check_fix_default_valueNc                 C   s   |du rt  }tjdd}|| }|| }t|tjr t|}nt|tjs(J | }| }||  kr:|krGn g S tjd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.
        N
   )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   )rr   r   r  offsetlowerupperrL   rL   rM   _check_if_value_fixedf  s(   
z(DateTimeCheckMixin._check_if_value_fixedrP   )rI   rJ   rK   r   r  r  r  r  rL   rL   r   rM   r  @  s
    r  c                       s   e Zd ZdZededdZedZ	d fdd	Zd	d
 Z fddZ	dd Z
dd Z fddZ fddZ fddZdddZdd Z fddZ  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)Nc                    @   ||| _ | _|s|rd|d< d|d< t j||fi | d S NFrg   Trb   r  r  r   r   rr   rn   ru   r  r  r   r   rL   rM   r     
   zDateField.__init__c                 C   sH   |   sg S | j}t|tjrt| }n	t|tjrng S | |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  r  r  r   rL   rL   rM   r    s   
z"DateField._check_fix_default_valuec                    sR   t   \}}}}| jrd|d< | jrd|d< | js| jr#|d= |d= ||||fS )NTr  r  rg   rb   r   r   r  r  r   r   rL   rM   r     s   zDateField.deconstructc                 C   r  )Nr/   rL   rq   rL   rL   rM   r/    r^   zDateField.get_internal_typec                 C   s   |d u r|S t |tjr"tjrt|rt }t||}| S t |tjr*|S zt	|}|d ur6|W S W n t
yK   tj| jd dd|idw tj| jd dd|id)Nr  r   r  r  )r   r  r	   USE_TZr   r  get_default_timezoner  r  r   r   r   r  rh   )rr   r   default_timezoneparsedrL   rL   rM   r    s4   zDateField.to_pythonc                    s:   | j s| jr|rtj }t|| j| |S t ||S rP   )	r  r  r  r  todayrM  rG  r   rW  rr   r   rV  r   r   rL   rM   rW    s
   
zDateField.pre_savec                    s`   t  j||fi | | js.t|d| j t|j| dd t|d| j t|j| dd d S d S )Nzget_next_by_%sT)r   is_nextzget_previous_by_%sF)r   rQ  ra   rM  ru   r   _get_next_or_previous_by_FIELDrr   r   ru   r   r   rL   rM   rQ    s"   zDateField.contribute_to_classc                    r  rP   r  r   r   rL   rM   rY    r  zDateField.get_prep_valuec                 C      |s|  |}|j|S rP   )rY  r)  adapt_datefield_valuerZ  rL   rL   rM   r\       
zDateField.get_db_prep_valuec                 C      |  |}|d u rdS | S NrO   rx  	isoformatrr   r   valrL   rL   rM   ry       
zDateField.value_to_stringc                       t  jdi dtji|S Nr  rL   )r   r  r   r/   r   r   rL   rM   r       
zDateField.formfieldNNFFr  )rI   rJ   rK   re  rp   r  r  r   r  r   r/  r  rW  rQ  rY  r\  ry  r  r  rL   rL   r   rM   r/     s,    
	
r/   c                       s   e Zd ZdZedededdZedZdd Zd	d
 Zdd Z	 fddZ
 fddZdddZdd Z fddZ  ZS )r0   Fue   “%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ] format.r  uq   “%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ]) but it is an invalid date/time.)r  r  invalid_datetimezDate (with time)c                 C   s2   |   sg S | j}t|tjtjfr| |S g S r  )r`  r|   r   r  r  r  r   rL   rL   rM   r  %  s   
z&DateTimeField._check_fix_default_valuec                 C   r  )Nr0   rL   rq   rL   rL   rM   r/  3  r^   zDateTimeField.get_internal_typec                 C   sV  |d u r|S t |tjr|S t |tjrRt|j|j|j}tjrPz| jj	 d| j
 }W n ty8   d}Y nw td| d| dt t }t||}|S zt|}|d ur^|W S W n tys   tj| jd dd|idw zt|}|d urt|j|j|jW S W n ty   tj| jd	 d	d|idw tj| jd
 d
d|id)N.	(unbound)zDateTimeField z received a naive datetime (z$) while time zone support is active.r  r   r  r  r  )r   r  r  yearmonthdayr	   r  r   rI   ru   AttributeErrorwarningswarnRuntimeWarningr   r  
make_awarer   r   r   r  rh   r   )rr   r   ru   r  r  rL   rL   rM   r  6  s`   zDateTimeField.to_pythonc                    s8   | j s| jr|rt }t|| j| |S t ||S rP   )r  r  r   r  rM  rG  r   rW  r  r   rL   rM   rW  k  s
   zDateTimeField.pre_savec                    s   t  |}| |}|d urBtjrBt|rBzd| jj| j	f }W n t
y-   d}Y nw td||f t t }t||}|S )Nr   r  zRDateTimeField %s received a naive datetime (%s) while time zone support is active.)r   rY  r  r	   r  r   is_naiver   rI   ru   r  r  r  r  r  r  )rr   r   ru   r  r   rL   rM   rY  v  s"   
zDateTimeField.get_prep_valuec                 C   r   rP   )rY  r)  adapt_datetimefield_valuerZ  rL   rL   rM   r\    r  zDateTimeField.get_db_prep_valuec                 C   r  r  r  r  rL   rL   rM   ry    r	  zDateTimeField.value_to_stringc                    r
  r  )r   r  r   r0   r   r   rL   rM   r    r  zDateTimeField.formfieldr  )rI   rJ   rK   re  rp   r  r  r  r/  r  rW  rY  r\  ry  r  r  rL   rL   r   rM   r0     s*    5
r0   c                       s   e Zd ZdZdediZedZ				d  fdd	Z fdd	Zd
d Z	dd Z
dd Ze fddZedd Z fddZdd Zdd Zdd Z fddZ fddZ  ZS )!r1   Fr  u/   “%(value)s” value must be a decimal number.zDecimal numberNc                    s(   ||| _ | _t j||fi | d S rP   )
max_digitsdecimal_placesr   r   )rr   rn   ru   r  r  r   r   rL   rM   r     s   zDecimalField.__init__c                    sR   t  jdi |}g |  |  }|s"|| jdi | |S || |S r   )r   r   _check_decimal_places_check_max_digitsr   $_check_decimal_places_and_max_digits)rr   r   r   digits_errorsr   rL   rM   r     s   
zDecimalField.checkc                 C   sf   zt | j}|dk rt W g S  ty!   tjd| ddg Y S  ty2   tjd| ddg Y S 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   )rr   r  rL   rL   rM   r    *   
z"DecimalField._check_decimal_placesc                 C   sf   zt | j}|dkrt W g S  ty!   tjd| ddg Y S  ty2   tjd| ddg Y S 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   )rr   r  rL   rL   rM   r    r!  zDecimalField._check_max_digitsc                 K   s*   t | jt | jkrtjd| 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   rL   rL   rM   r    s   z1DecimalField._check_decimal_places_and_max_digitsc                    s   t  jt| j| jg S rP   )r   r   DecimalValidatorr  r  rq   r   rL   rM   r     s   zDecimalField.validatorsc                 C   s   t j| jdS )N)prec)decimalContextr  rq   rL   rL   rM   context  r   zDecimalField.contextc                    sF   t   \}}}}| jd ur| j|d< | jd ur| j|d< ||||fS )Nr  r  )r   r   r  r  r   r   rL   rM   r     s   



zDecimalField.deconstructc                 C   r  )Nr1   rL   rq   rL   rL   rM   r/  	  r^   zDecimalField.get_internal_typec              
   C   s   |d u r|S zt |tr| j|}nt|}W n tjttfy1   t	j
| jd dd|idw | sCt	j
| jd dd|id|S Nr  r   r  )r   floatr&  create_decimal_from_floatr$  DecimalInvalidOperationr   r   r   r  rh   	is_finite)rr   r   decimal_valuerL   rL   rM   r    s*   

zDecimalField.to_pythonc                 C   s(   t |dr|S |j| || j| jS )Nr]  )r   r)  adapt_decimalfield_valuer  r  r  r^  rL   rL   rM   r_  "  s
   
zDecimalField.get_db_prep_savec                    r  rP   r  r   r   rL   rM   rY  )  r  zDecimalField.get_prep_valuec                    s$   t  jdi | j| jtjd|S )N)r  r  r  rL   )r   r  r  r  r   r1   r   r   rL   rM   r  -  s   
zDecimalField.formfield)NNNN)rI   rJ   rK   re  rp   r  r  r   r   r  r  r  r"   r   r&  r   r/  r  r_  rY  r  r  rL   rL   r   rM   r1     s0    
r1   c                       sf   e Zd ZdZdZdediZedZdd Zdd	 Z	dd
dZ
 fddZdd Z fddZ  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                 C   r  )Nr2   rL   rq   rL   rL   rM   r/  I  r^   zDurationField.get_internal_typec                 C   sb   |d u r|S t |tjr|S zt|}W n	 ty   Y nw |d ur$|S tj| jd dd|idr'  )r   r  r  r   r   r   r  rh   rr   r   r  rL   rL   rM   r  L  s    zDurationField.to_pythonc                 C   s    |j jr|S |d u rd S t|S rP   )r   has_native_duration_fieldr   rZ  rL   rL   rM   r\  _  s
   zDurationField.get_db_prep_valuec                    s*   g }|j js||jj |t | S rP   )r   r1  r   r)  convert_durationfield_valuer   r@  )rr   r   
convertersr   rL   rM   r@  f  s   zDurationField.get_db_convertersc                 C   s   |  |}|d u rdS t|S r  )rx  r    r  rL   rL   rM   ry  l  r	  zDurationField.value_to_stringc                    r
  r  )r   r  r   r2   r   r   rL   rM   r  p  r  zDurationField.formfieldr  )rI   rJ   rK   r  re  rp   r  r  r/  r  r\  r@  ry  r  r  rL   rL   r   rM   r2   8  s    
r2   c                       sD   e Zd ZejgZedZ fddZ fddZ	 fddZ
  ZS )r3   zEmail addressc                    s"   | dd t j|i | d S )Nrx      
setdefaultr   r   rr   r   r   r   rL   rM   r   }  s   zEmailField.__init__c                    s   t   \}}}}||||fS rP   r   r   r   r   rL   rM   r     s   zEmailField.deconstructc                    r
  r  )r   r  r   r3   r   r   rL   rM   r       
zEmailField.formfield)rI   rJ   rK   r   validate_emailr  rp   r  r   r   r  r  rL   rL   r   rM   r3   y  s    r3   c                       st   e Zd ZedZ							d fdd	Z fdd	Zd
d Z fddZ fddZ	 fddZ
dd Z  ZS )r6   z	File pathNrO   FTc           	         sJ   |||| _ | _| _||| _| _|dd t j||fi | d S )Nrx   d   )r   match	recursiveallow_filesallow_foldersr6  r   r   )	rr   rn   ru   r   r<  r=  r>  r?  r   r   rL   rM   r     s   zFilePathField.__init__c                    &   g t  jdi || jdi |S r   )r   r    _check_allowing_files_or_foldersr   r   rL   rM   r     
   zFilePathField.checkc                 K   s"   | j s| jstjd| 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   rL   rL   rM   rA    s   z.FilePathField._check_allowing_files_or_foldersc                    s   t   \}}}}| jdkr| j|d< | jd ur| j|d< | jdur'| j|d< | jdur1| j|d< | jdur;| j|d< |d	d
krE|d	= ||||fS )NrO   r   r<  Fr=  Tr>  r?  rx   r;  )r   r   r   r<  r=  r>  r?  r   r   r   rL   rM   r     s   









zFilePathField.deconstructc                        t  |}|d u rd S t|S rP   r   rY  r   r   r   rL   rM   rY       zFilePathField.get_prep_valuec              
      sB   t  jdi t| jr|  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?  r   r   rL   rM   r    s   
zFilePathField.formfieldc                 C   r  )Nr6   rL   rq   rL   rL   rM   r/    r^   zFilePathField.get_internal_type)NNrO   NFTF)rI   rJ   rK   rp   r  r   r   rA  r   rY  r  r/  r  rL   rL   r   rM   r6     s     r6   c                       sP   e Zd ZdZdediZedZ fddZdd Zd	d
 Z	 fddZ
  ZS )r7   Fr  u&   “%(value)s” value must be a float.zFloating point numberc              
      V   t  |}|d u rd S zt|W S  ttfy* } z|d| j|f |d }~ww Nz(Field '%s' expected a number but got %r.)r   rY  r(  r   r   rX   ru   rr   r   r  r   rL   rM   rY       
zFloatField.get_prep_valuec                 C   r  )Nr7   rL   rq   rL   rL   rM   r/    r^   zFloatField.get_internal_typec              	   C   D   |d u r|S zt |W S  ttfy!   tj| jd dd|idw r'  )r(  r   r   r   r  rh   r   rL   rL   rM   r       
zFloatField.to_pythonc                    r
  r  )r   r  r   r7   r   r   rL   rM   r     r  zFloatField.formfield)rI   rJ   rK   re  rp   r  r  rY  r/  r  r  r  rL   rL   r   rM   r7     s    r7   c                       s   e Zd ZdZdediZedZ fddZdd Ze	 fd	d
Z
 fddZd fdd	Zdd Zdd Z fddZ  ZS )r:   Fr  u)   “%(value)s” value must be an integer.Integerc                       g t  jdi ||  S r   )r   r   _check_max_length_warningr   r   rL   rM   r     
   zIntegerField.checkc                 C   s*   | j d urtjd| jj d| ddgS g S )Nz*'max_length' is ignored when used with %s.zRemove 'max_length' from fieldzfields.W122r   )rx   r
   r   rX   rI   rq   rL   rL   rM   rN    s   
	z&IntegerField._check_max_length_warningc                    s   t  j}|  }tj|\ d ur'tfdd|D s'|t  d ur>t fdd|D s>|t	  |S )Nc                 3   s8    | ]}t |tjot|jr| n|j kV  qd S rP   )r   r   MinValueValidatorr   limit_valuer   r   )	min_valuerL   rM   r   *      


z*IntegerField.validators.<locals>.<genexpr>c                 3   s8    | ]}t |tjot|jr| n|j kV  qd S rP   )r   r   MaxValueValidatorr   rQ  rR  )	max_valuerL   rM   r   7  rT  )
r   r   r/  r   r)  integer_field_rangeanyr   rP  rU  )rr   validators_internal_typer   )rV  rS  rM   r   #  s   

zIntegerField.validatorsc              
      rF  rG  )r   rY  r  r   r   rX   ru   rH  r   rL   rM   rY  F  rI  zIntegerField.get_prep_valuec                    s"   t  |||}|j||  S rP   )r   r\  r)  adapt_integerfield_valuer/  rZ  r   rL   rM   r\  Q  s   zIntegerField.get_db_prep_valuec                 C   r  )Nr:   rL   rq   rL   rL   rM   r/  U  r^   zIntegerField.get_internal_typec              	   C   rJ  r'  )r  r   r   r   r  rh   r   rL   rL   rM   r  X  rK  zIntegerField.to_pythonc                    r
  r  )r   r  r   r:   r   r   rL   rM   r  d  r  zIntegerField.formfieldr  )rI   rJ   rK   re  rp   r  r  r   rN  r"   r   rY  r\  r/  r  r  r  rL   rL   r   rM   r:   	  s    "r:   c                       s0   e Zd ZedZdZdd Z fddZ  ZS )r*   zBig (8 byte) integerl    c                 C   r  )Nr*   rL   rq   rL   rL   rM   r/  q  r^   z!BigIntegerField.get_internal_typec                    s&   t  jdi tj d tjd|S )Nrt   )rS  rV  rL   )r   r  r*   
MAX_BIGINTr   r   rL   rM   r  t  s   

zBigIntegerField.formfield)	rI   rJ   rK   rp   r  r\  r/  r  r  rL   rL   r   rM   r*   m  s
    r*   c                   @   s   e Zd ZedZdd ZdS )rB   zSmall integerc                 C   r  )NrB   rL   rq   rL   rL   rM   r/    r^   z#SmallIntegerField.get_internal_typeN)rI   rJ   rK   rp   r  r/  rL   rL   rL   rM   rB   ~  s    rB   c                       sT   e Zd ZdZedZddddZ fddZ fd	d
Z fddZ	dd Z
  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  j|i | d S )N   rx   r   r   r7  r   rL   rM   r        zIPAddressField.__init__c                    $   t   \}}}}|d= ||||fS Nrx   r8  r   r   rL   rM   r        zIPAddressField.deconstructc                    rC  rP   rD  r   r   rL   rM   rY    rE  zIPAddressField.get_prep_valuec                 C   r  )Nr9   rL   rq   rL   rL   rM   r/    r^   z IPAddressField.get_internal_type)rI   rJ   rK   re  rp   r  r   r   r   rY  r/  r  rL   rL   r   rM   r9     s    	r9   c                       s   e Zd ZdZedZdediZ				d fdd	Z fd	d
Zdd Z	 fddZ
dd Zdd ZdddZ fddZ fddZ  ZS )r8   Fz
IP addressr  z#Enter a valid %(protocol)s address.Nbothc                    sB   || _ || _t||| _t|d< t j||g|R i | d S rb  )unpack_ipv4protocolr   ip_address_validatorsr  r#   r   r   )rr   rn   ru   rf  re  r   r   r   rL   rM   r     s   	 zGenericIPAddressField.__init__c                    r@  r   )r   r   _check_blank_and_null_valuesr   r   rL   rM   r     rB  zGenericIPAddressField.checkc                 K   s.   t | ddst | ddrtjd| ddgS g S )Nra   Frb   zaGenericIPAddressFields cannot have blank=True if null=False, as blank values are stored as nulls.zfields.E150r   )r   r
   r   r   rL   rL   rM   rh    s   z2GenericIPAddressField._check_blank_and_null_valuesc                    s\   t   \}}}}| jdur| j|d< | jdkr| j|d< |d| jkr(|d= ||||fS )NFre  rd  rf  rx   )r   r   re  rf  r   rx   r   r   rL   rM   r     s   



z!GenericIPAddressField.deconstructc                 C   r  )Nr8   rL   rq   rL   rL   rM   r/    r^   z'GenericIPAddressField.get_internal_typec                 C   sF   |d u rd S t |tst|}| }d|v r!t|| j| jd S |S )N:r  )r   r   stripr$   re  rh   r   rL   rL   rM   r    s   
zGenericIPAddressField.to_pythonc                 C   r   rP   )rY  r)  adapt_ipaddressfield_valuerZ  rL   rL   rM   r\    s   
z'GenericIPAddressField.get_db_prep_valuec                    sV   t  |}|d u rd S |r'd|v r'zt|| jW S  tjy&   Y t|S w t|S )Nri  )r   rY  r$   re  r   r  r   r   r   rL   rM   rY    s   z$GenericIPAddressField.get_prep_valuec                    s    t  jdi | jtjd|S )N)rf  r  rL   )r   r  rf  r   r8   r   r   rL   rM   r       
zGenericIPAddressField.formfield)NNrd  Fr  )rI   rJ   rK   re  rp   r  r  r   r   rh  r   r/  r  r\  rY  r  r  rL   rL   r   rM   r8     s"    

r8   c                       sN   e Zd ZededdZedZddddZ fdd	Z fd
dZ  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                    s&   d|d< d|d< t  j|i | d S )NTra   rb   r_  r7  r   rL   rM   r   	  s   zNullBooleanField.__init__c                    s*   t   \}}}}|d= |d= ||||fS )Nra   rb   r8  r   r   rL   rM   r   	  s   zNullBooleanField.deconstruct)
rI   rJ   rK   rp   r  r  r   r   r   r  rL   rL   r   rM   r<     s    	r<   c                       s$   e Zd Z fddZdd Z  ZS )PositiveIntegerRelDbTypeMixinc                    sD   t  jdi | t| ds tdd | jdd  D d | _d S d S )Ninteger_field_classc                 s   s    | ]
}t |tr|V  qd S rP   )
issubclassr:   )r   parentrL   rL   rM   r   	  s    
zBPositiveIntegerRelDbTypeMixin.__init_subclass__.<locals>.<genexpr>rt   rL   )r   __init_subclass__r   nextr  rn  )r   r   r   rL   rM   rq  	  s   

z/PositiveIntegerRelDbTypeMixin.__init_subclass__c                 C   s"   |j jr	| |S |  j|d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_typer5  rn  r+  rL   rL   rM   r6  '	  s   	
z)PositiveIntegerRelDbTypeMixin.rel_db_type)rI   rJ   rK   rq  r6  r  rL   rL   r   rM   rm  	  s    rm  c                       ,   e Zd ZedZdd Z fddZ  ZS )r=   zPositive big integerc                 C   r  )Nr=   rL   rq   rL   rL   rM   r/  9	  r^   z)PositiveBigIntegerField.get_internal_typec                       t  jdi ddi|S NrS  r   rL   r   r  r   r   rL   rM   r  <	     
z!PositiveBigIntegerField.formfieldrI   rJ   rK   rp   r  r/  r  r  rL   rL   r   rM   r=   6	      r=   c                       ru  )r>   zPositive integerc                 C   r  )Nr>   rL   rq   rL   rL   rM   r/  H	  r^   z&PositiveIntegerField.get_internal_typec                    rv  rw  rx  r   r   rL   rM   r  K	  ry  zPositiveIntegerField.formfieldrz  rL   rL   r   rM   r>   E	  r{  r>   c                       ru  )r?   zPositive small integerc                 C   r  )Nr?   rL   rq   rL   rL   rM   r/  W	  r^   z+PositiveSmallIntegerField.get_internal_typec                    rv  rw  rx  r   r   rL   rM   r  Z	  ry  z#PositiveSmallIntegerField.formfieldrz  rL   rL   r   rM   r?   T	  r{  r?   c                       sV   e Zd ZejgZedZdddd fdd
Z fdd	Z	d
d Z
 fddZ  ZS )r@   zSlug (up to %(max_length)s)2   TF)rx   r   allow_unicodec                   s2   || _ | j rtjg| _t j|||d| d S )N)rx   r   )r}  r   validate_unicode_slugr  r   r   )rr   rx   r   r}  r   r   r   rL   rM   r   g	  s   
zSlugField.__init__c                    s`   t   \}}}}|ddkr|d= | jdu rd|d< n|d= | jdur*| j|d< ||||fS )Nrx   r|  Fr   r}  )r   r   r   r   r}  r   r   rL   rM   r   o	  s   



zSlugField.deconstructc                 C   r  )Nr@   rL   rq   rL   rL   rM   r/  {	  r^   zSlugField.get_internal_typec                    s    t  jdi tj| jd|S )N)r  r}  rL   )r   r  r   r@   r}  r   r   rL   rM   r  ~	  rl  zSlugField.formfield)rI   rJ   rK   r   validate_slugr  rp   r  r   r   r/  r  r  rL   rL   r   rM   r@   c	  s    r@   c                       s   e Zd ZedZdd fdd
Z fddZdd	 Z fd
dZdd Z	dd Z
 fddZ fddZ fddZdd Z  ZS )rC   TextNr  c                   s   t  j|i | || _d S rP   )r   r   r  r  r   rL   rM   r   	  s   
zTextField.__init__c                    s.   | dpg }g t jdi || |S r  )r   r   r   r  r  r   rL   rM   r   	  s   zTextField.checkc                 C   r  )Nsupports_collation_on_textfieldz7%s does not support a database collation on TextFields.r  r   )r   r   r   r   r  rR   r   r   r  r   r
   r   r   r  rL   rL   rM   r  	  r  zTextField._check_db_collationc                    r  r  r  r  r   rL   rM   r<  	  r  zTextField.db_parametersc                 C   r  )NrC   rL   rq   rL   rL   rM   r/  	  r^   zTextField.get_internal_typec                 C   r  rP   r  r   rL   rL   rM   r  	  r  zTextField.to_pythonc                    r  rP   r  r   r   rL   rM   rY  	  r  zTextField.get_prep_valuec                    s4   t  jdi d| ji| jd uri ndtji|S )Nrx   r  rL   )r   r  rx   re   r   Textarear   r   rL   rM   r  	  s   
zTextField.formfieldc                    r  r  r  r   r   rL   rM   r   	  r  zTextField.deconstructc                 C   r  r  r  r  rL   rL   rM   r  	  r  zTextField.slice_expression)rI   rJ   rK   rp   r  r   r   r  r<  r/  r  rY  r  r   r  r  rL   rL   r   rM   rC   	  s    rC   c                       s   e Zd ZdZededdZedZ	d fdd	Zd	d
 Z fddZ	dd Z
dd Z fddZ fddZdddZdd Z fddZ  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TimeNc                    r  r  r  r  r   rL   rM   r   	  r  zTimeField.__init__c                 C   s\   |   sg S | j}t|tjrd}nt|tjr%t }tj| |}ng S | j||dS )r  N)r  )	r`  r|   r   r  timer  combiner  r  )rr   r   r  rL   rL   rM   r  	  s   z"TimeField._check_fix_default_valuec                    s^   t   \}}}}| jdur| j|d< | jdur| j|d< | js#| jr)|d= |d= ||||fS )NFr  r  rb   rg   r  r   r   rL   rM   r   
  s   



zTimeField.deconstructc                 C   r  )NrD   rL   rq   rL   rL   rM   r/  
  r^   zTimeField.get_internal_typec                 C   s   |d u rd S t |tjr|S t |tjr| S zt|}|d ur$|W S W n ty9   tj| jd dd|idw tj| jd dd|id)Nr  r   r  r  )r   r  r  r   r   r   r  rh   r0  rL   rL   rM   r  
  s.   zTimeField.to_pythonc                    s>   | j s| jr|rtj  }t|| j| |S t ||S rP   )	r  r  r  r  r  rM  rG  r   rW  r  r   rL   rM   rW  ,
  s
   zTimeField.pre_savec                    r  rP   r  r   r   rL   rM   rY  4
  r  zTimeField.get_prep_valuec                 C   r   rP   )rY  r)  adapt_timefield_valuerZ  rL   rL   rM   r\  8
  r  zTimeField.get_db_prep_valuec                 C   r  r  r  r  rL   rL   rM   ry  >
  r	  zTimeField.value_to_stringc                    r
  r  )r   r  r   rD   r   r   rL   rM   r  B
  r  zTimeField.formfieldr  r  )rI   rJ   rK   re  rp   r  r  r   r  r   r/  r  rW  rY  r\  ry  r  r  rL   rL   r   rM   rD   	  s*    
	
rD   c                       sH   e Zd Ze gZedZd	 fdd	Z fddZ	 fddZ
  ZS )
rE   URLNc                    s&   | dd t j||fi | d S Nrx      r5  )rr   rn   ru   r   r   rL   rM   r   O
  s   zURLField.__init__c                    s2   t   \}}}}|ddkr|d= ||||fS r  )r   r   r   r   r   rL   rM   r   S
  s   zURLField.deconstructc                    r
  r  )r   r  r   rE   r   r   rL   rM   r  Y
  r9  zURLField.formfieldr  )rI   rJ   rK   r   URLValidatorr  rp   r  r   r   r  r  rL   rL   r   rM   rE   K
  s    
rE   c                       s   e Zd ZedZddgZ fddZ fddZdd	 Z fd
dZ	dd Z
dd Z fddZd fdd	Zdd Zdd Z  ZS )r+   zRaw binary dataN    c                    sD   | dd t j|i | | jd ur | jt| j d S d S )Nrg   F)r6  r   r   rx   r   r   r  r7  r   rL   rM   r   h
  s
   
zBinaryField.__init__c                    rM  r   )r   r   _check_str_default_valuer   r   rL   rM   r   n
  s   zBinaryField.checkc                 C   s*   |   rt| jtrtjd| 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   rq   rL   rL   rM   r  q
  s   z$BinaryField._check_str_default_valuec                    s4   t   \}}}}| jrd|d< n|d= ||||fS )NTrg   )r   r   rg   r   r   rL   rM   r   }
  s
   
zBinaryField.deconstructc                 C   r  )Nr+   rL   rq   rL   rL   rM   r/  
  r^   zBinaryField.get_internal_typec                 C   s   |j |S rP   )r)  binary_placeholder_sql)rr   r   r   r   rL   rL   rM   get_placeholder
  r  zBinaryField.get_placeholderc                    s2   |   rt| js| jS t  }|dkrdS |S )NrO   r  )r`  r   r|   r   r
  )rr   r|   r   rL   rM   r
  
  s   
zBinaryField.get_defaultFc                    s(   t  |||}|d ur|j|S |S rP   )r   r\  DatabaseBinaryrZ  r   rL   rM   r\  
  s   zBinaryField.get_db_prep_valuec                 C   s   t | |dS )z#Binary data is serialized as base64ascii)r   rx  decoder  rL   rL   rM   ry  
  s   zBinaryField.value_to_stringc                 C   s    t |trtt|dS |S )Nr  )r   r   
memoryviewr   encoder   rL   rL   rM   r  
  s   
zBinaryField.to_pythonr  )rI   rJ   rK   rp   r  r  r   r   r  r   r/  r  r
  r\  ry  r  r  rL   rL   r   rM   r+   d
  s    r+   c                       st   e Zd ZdediZedZdZd fdd	Z fdd	Zd
d Z	 fddZ
dddZdd Z fddZ  ZS )rF   r  u$   “%(value)s” is not a valid UUID.zUniversally unique identifierFNc                    s    d|d< t  j|fi | d S )N    rx   r_  )rr   rn   r   r   rL   rM   r   
  s   zUUIDField.__init__c                    ra  rb  r8  r   r   rL   rM   r   
  rc  zUUIDField.deconstructc                 C   r  )NrF   rL   rq   rL   rL   rM   r/  
  r^   zUUIDField.get_internal_typec                    r  rP   r  r   r   rL   rM   rY  
  r  zUUIDField.get_prep_valuec                 C   s4   |d u rd S t |tjs| |}|jjr|S |jS rP   )r   uuidUUIDr  r   has_native_uuid_fieldhexrZ  rL   rL   rM   r\  
  s   
zUUIDField.get_db_prep_valuec              	   C   sn   |d ur5t |tjs5t |trdnd}ztjdi ||iW S  ttfy4   tj| jd dd|idw |S )Nr  r  r  r   r  rL   )	r   r  r  r  r  r   r   r  rh   )rr   r   
input_formrL   rL   rM   r  
  s   zUUIDField.to_pythonc                    r
  r  )r   r  r   rF   r   r   rL   rM   r  
  r  zUUIDField.formfieldrP   r  )rI   rJ   rK   rp   r  r  re  r   r   r/  rY  r\  r  r  r  rL   rL   r   rM   rF   
  s    

rF   c                       sf   e Zd ZdZ fddZ fddZdd Z fdd	Zd
d ZdddZ	 fddZ
dd Z  ZS )AutoFieldMixinTc                    r]  )NTrb   r_  r7  r   rL   rM   r   
  r`  zAutoFieldMixin.__init__c                    rM  r   )r   r   _check_primary_keyr   r   rL   rM   r   
  rO  zAutoFieldMixin.checkc                 C   s   | j stjd| ddgS g S )Nz%AutoFields must set primary_key=True.zfields.E100r   )rw   r
   r   rq   rL   rL   rM   r  
  s   z!AutoFieldMixin._check_primary_keyc                    s,   t   \}}}}|d= d|d< ||||fS )Nrb   Trw   r8  r   r   rL   rM   r   
  s   zAutoFieldMixin.deconstructc                 C   r\   rP   rL   r&  rL   rL   rM   r%  
  r^   zAutoFieldMixin.validateFc                 C   s   |s|  |}|j|}|S rP   )rY  r)  validate_autopk_valuerZ  rL   rL   rM   r\  
  s   
z AutoFieldMixin.get_db_prep_valuec                    s:   |j jrtd|j j t j||fi | | |j _d S )Nz7Model %s can't have more than one auto-generated field.)rR   
auto_fieldr   r   r   rQ  r  r   rL   rM   rQ    s   z"AutoFieldMixin.contribute_to_classc                 K   r\   rP   rL   r   rL   rL   rM   r    r^   zAutoFieldMixin.formfieldr  )rI   rJ   rK   rD  r   r   r  r   r%  r\  rQ  r  r  rL   rL   r   rM   r  
  s    
	r  c                       s8   e Zd ZdZedd Z fddZ fddZ  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                 C   s   t tfS rP   )r)   rA   rq   rL   rL   rM   _subclasses!  ra  zAutoFieldMeta._subclassesc                       t || jpt |S rP   )r   r  r   __instancecheck__r  r   rL   rM   r  %     zAutoFieldMeta.__instancecheck__c                    r  rP   )ro  r  r   __subclasscheck__)rr   subclassr   rL   rM   r  *  r  zAutoFieldMeta.__subclasscheck__)	rI   rJ   rK   r  r  r  r  r  r  rL   rL   r   rM   r    s    
r  c                   @      e Zd Zdd Zdd ZdS )r'   c                 C   r  )Nr'   rL   rq   rL   rL   rM   r/  1  r^   zAutoField.get_internal_typec                 C      t  j|dS Nrs  )r:   r5  r+  rL   rL   rM   r6  4     zAutoField.rel_db_typeNrI   rJ   rK   r/  r6  rL   rL   rL   rM   r'   0      r'   )	metaclassc                   @   r  )r)   c                 C   r  )Nr)   rL   rq   rL   rL   rM   r/  9  r^   zBigAutoField.get_internal_typec                 C   r  r  )r*   r5  r+  rL   rL   rM   r6  <  r  zBigAutoField.rel_db_typeNr  rL   rL   rL   rM   r)   8  r  r)   c                   @   r  )rA   c                 C   r  )NrA   rL   rq   rL   rL   rM   r/  A  r^   z SmallAutoField.get_internal_typec                 C   r  r  )rB   r5  r+  rL   rL   rM   r6  D  r  zSmallAutoField.rel_db_typeNr  rL   rL   rL   rM   rA   @  r  rA   )jr   r  r$  rm  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#   r$   django.utils.textr%   django.utils.translationr&   rp   __all__r4   r;   r(   rW   r[   r]   r5   r,   r-   r.   r  r  r  r/   r0   r1   r2   r3   r6   r7   r:   r*   rB   r9   r8   r<   rm  r=   r>   r?   r@   rC   rD   rE   r+   rF   r  r9  r  r'   r)   rA   rL   rL   rL   rM   <module>   s    $        .wI   AL*d[%Mv@75 