o Ih)i@sddlZddlZddlZddlZddlZddlZddlZddlm Z m Z ddl m Z m Z ddlmZddlmZddlmZddlmZmZmZddlmZmZmZdd lmZdd lmZm Z dd l!m"Z"dd l#m$Z$dd l%m&Z&m'Z'm(Z(m)Z)ddl*m+Z+m,Z,ddl-m.Z.m/Z/ddl0m1Z1m2Z2ddl3m4Z4ddl5m6Z6ddl7m8Z9gdZ:GdddZ;GdddZddZ?ddZ@e Gd d!d!e ZAGd"d#d#eAZBGd$d%d%eAZCGd&d'd'eCZDGd(d)d)ZEGd*d+d+eEeAZFGd,d-d-eFZGGd.d/d/eAZHGd0d1d1eAZIGd2d3d3eCZJGd4d5d5eAZKGd6d7d7eAZLGd8d9d9eAZMGd:d;d;eMZNGdd?d?eAZPGd@dAdAeAZQGdBdCdCeBZRGdDdEdEZSGdFdGdGeSeNZTGdHdIdIeSeMZUGdJdKdKeSeOZVGdLdMdMeCZWGdNdOdOeAZXGdPdQdQeEeAZYGdRdSdSeCZZGdTdUdUeAZ[GdVdWdWeAZ\GdXdYdYZ]GdZd[d[e^Z_Gd\d]d]e]eMe_d^Z`Gd_d`d`e]eNZaGdadbdbe]eOZbdS)cN) b64decode b64encode) partialmethodtotal_ordering)forms)apps)settings)checks exceptions validators) connection connectionsrouter) LOOKUP_SEP)DeferredAttributeRegisterLookupMixin)timezone) DictWrapper) parse_dateparse_datetimeparse_duration parse_time)duration_microsecondsduration_string)Promisecached_property)MAX_IPV6_ADDRESS_LENGTHclean_ipv6_address) is_iterable)capfirst) gettext_lazy) AutoFieldBLANK_CHOICE_DASH BigAutoFieldBigIntegerField BinaryField BooleanField CharFieldCommaSeparatedIntegerField DateField DateTimeField DecimalField DurationField EmailFieldEmptyField FilePathField FloatFieldGenericIPAddressFieldIPAddressField IntegerField NOT_PROVIDEDNullBooleanFieldPositiveBigIntegerFieldPositiveIntegerFieldPositiveSmallIntegerField SlugFieldSmallAutoFieldSmallIntegerField TextField TimeFieldURLField UUIDFieldc@ eZdZdS)r.N__name__ __module__ __qualname__rFrFB/usr/lib/python3/dist-packages/django/db/models/fields/__init__.pyr.*r.c@rA)r5NrBrFrFrFrGr5.rHr5)z ---------cCst||j|SN)r get_model_meta get_field) app_label model_name field_namerFrFrG _load_field7srQcCst}||_|SrJ)r. __class__)of_clsnewrFrFrG_emptyJsrUcCdSrJrFrFrFrFrG return_NonePrWcseZdZdZdZeejZdZ dZ gZ e de de de de d d Z d Zd Zd Zd Zd Zd Zd Zd ZeZd dZeeZd d d d d d d d d eddd d d d dd d d dd fddZfddZddZddZddZ e!ddZ"ddZ#dd Z$d!d"Z%dd#d$Z&d%d&Z'd'd(Z(dd)d*Z)e*d+d,Z+d-d.Z,d/d0Z-d1d2Z.d3d4Z/d5d6Z0d7d8Z1d9d:Z2d;d<Z3d=d>Z4d?d@Z5dAdBZ6e*dCdDZdEdFZ7dGdHZ8dIdJZ9dKdLZ:dMdNZ;dOdPZdUdVZ?dWdXZ@dYdZZAed[d\ZBed]d^ZCed_d`ZDdadbZEddcddZFdedfZGdgdhZHdidjZIdkdlZJdmdnZKdodpZLddqdrZMdsdtZNdudvZOdwdxZPe*dydzZQdeRd dfd{d|ZSd}d~ZTddZUeeUZVddZWdddZXddZYZZS)r/zBase class for all field typesTrz&Value %(value)r is not a valid choice.zThis field cannot be null.zThis 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_choicenullblankuniqueunique_for_dateNFcCstdd|jjiS)NzField of type: %(field_type)s field_type)_rRrCselfrFrFrG _description}szField._descriptionrIrFcCs&||_||_||_||_|||_|_|||_|_| |_|jdu|_ | |_ | |_ | |_ | |_ ||_||_t|tjjr@t|}||_||_||_||_||_||_|r`tj|_tjd8_n tj|_tjd7_t||_i}t|j j!D] }|"t#|diqx|"|pi||_$||_%dS)Ndefault_error_messages)&name verbose_name _verbose_name primary_key max_length_uniquer\r[ remote_field is_relationdefaulteditable serializer^unique_for_monthunique_for_year isinstance collectionsabcIteratorlistchoices help_textdb_index db_column_db_tablespace auto_createdr/auto_creation_countercreation_counter _validatorsreversedrR__mro__updategetattr_error_messageserror_messages)rbrgrfrirjr]r\r[rzrelrnrorpr^rqrrrxryr{ db_tablespacer}r rmessagescrFrFrG__init__sD   zField.__init__cs,t|ds tS|j}d|jj|jfS)zb Return "app_label.model_label.field_name" for fields attached to models. model%s.%s)hasattrsuper__str__rrLlabelrf)rbrrRrFrGrs  z Field.__str__cCs<d|jj|jjf}t|dd}|durd||fSd|S)z1Display the module, class, and name of the field.rrfNz<%s: %s>z<%s>)rRrDrEr)rbpathrfrFrFrG__repr__s   zField.__repr__cKsDg|||||jdi|||SNrF)_check_field_name_check_choices_check_db_index$_check_null_allowed_for_primary_keys_check_backend_specific_checks_check_validators_check_deprecation_detailsrbkwargsrFrFrGchecksz Field.checkcCs^|jdrtjd|ddgSt|jvrtjdt|ddgS|jdkr-tjd|d dgSgS) z Check if field name is valid, i.e. 1) does not end with an underscore, 2) does not contain "__" and 3) is not "pk". r`z,Field names must not end with an underscore.z fields.E001objidz"Field names must not contain "%s".z fields.E002pkz<'pk' is a reserved word that cannot be used as a field name.z fields.E003)rfendswithr ErrorrrarFrFrGrs,   zField._check_field_namecCst|ttfp t| SrJ)rsstrrr)clsvaluerFrFrG_choices_is_valueszField._choices_is_valuec sZjsgStjrtjtrtjdddgSd}jD]n}z|\}}Wn ttfy2Ynrwz#tfdd|DsBWnbj durU|rUt |gdd|D}Wn.ttfy||}} |rn |sqYn3j durt|trt |t |}Ynwt|trnqj dur|j krtjd|d dgSgStjd d dgS) Nz6'choices' must be an iterable (e.g., a list or tuple).z fields.E004rrc3s(|]\}}|o|VqdSrJ)r).0r human_namerarFrG s  z'Field._check_choices..css&|]\}}t|trt|VqdSrJ)rsrlen)rrr`rFrFrGrs$zP'max_length' is too small to fit the longest value in 'choices' (%d characters).z fields.E009zT'choices' must be an iterable containing (actual value, human readable name) tuples.z fields.E005) rxrrsrr r TypeError ValueErrorallrjmaxrr)rbchoice_max_length choices_group group_name group_choicesrrrFrarGrsn      zField._check_choicescCs |jdvrtjd|ddgSgS)N)NTFz''db_index' must be None, True or False.z fields.E006r)rzr rrarFrFrGr3s zField._check_db_indexcCs,|jr|jrtjjstjdd|ddgSgS)Nz%Primary keys must not have null=True.zASet null=False on the field, or remove primary_key=True argument.z fields.E007hintrr)rir[r features!interprets_empty_strings_as_nullsr rrarFrFrGr?s  z*Field._check_null_allowed_for_primary_keyscKs\|durgS|jjj}g}|D]}tj|||jjjdr+|t|jj |fi|q|S)N)rO) rrLrNr allow_migraterOextendr validation check_field)rb databasesrrNerrorsaliasrFrFrGrQs z$Field._check_backend_specific_checksc CsJg}t|jD]\}}t|s"|tjddj|t|d|ddq|S)Nz"All 'validators' must be callable.zKvalidators[{i}] ({repr}) isn't a function or instance of a validator class.)ireprz fields.E008r) enumerater callableappendr rformatr)rbrr validatorrFrFrGr[s  zField._check_validatorscCs|jdur!tj|jdd|jj|jd||jdddgS|jdurBtj|jdd|jj|jd||jdddgSgS) Nmsgz@%s has been removed except for support in historical migrations.rrz fields.EXXXrz%s has been deprecated.z fields.WXXX)system_check_removed_detailsr rgetrRrCsystem_check_deprecated_detailsWarningrarFrFrGrns2        z Field._check_deprecation_detailscCs@|dur|}||jjjks||krddlm}||||S|jSNr)Col)rrLdb_tabledjango.db.models.expressionsr cached_col)rbr output_fieldrrFrFrGget_cols   z Field.get_colcCsddlm}||jjj|Sr)rrrrLr)rbrrFrFrGrs zField.cached_colcCs||fS)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. rF)rbcompilersqlparamsrFrFrG select_formatszField.select_formatc Csi}iddddddddddddd dd td d d d dddddddddddddddgdd}dddddd}ddh}|D]1\}}t||||}|dkrit|tjjrit|}||vrv||kru|||<qM||ur~|||<qMd|j j |j j f}| dr| dd }n/| d!r| d!d }n#| d"r| d"d }n| d#r| d#d }n | d$r| d$d }|j|g|fS)%az 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. rgNriFrjr]r\r[rzrnroTrpr^rqrrrxryrIr{r)r}r rrkrrrhr|)r]rr rgrr rzdjango.db.models.fields.relatedzdjango.db.modelszdjango.db.models.fields.fileszdjango.db.models.fields.jsonzdjango.db.models.fields.proxyzdjango.db.models.fields)r5itemsrrrsrtruIterablerwrRrDrE startswithreplacerf) rbkeywords possiblesattr_overridesequals_comparisonrfrnrrrFrFrG deconstructs!           zField.deconstructcCs |\}}}}|j|i|S)z Uses deconstruct() to clone a new copy of this Field. Will not preserve any class attachments/attribute names. )rrRrbrfrargsrrFrFrGclonesz Field.clonecCs2t|tr|j|jkot|ddt|ddkStSNr)rsr/rrNotImplementedrbotherrFrFrG__eq__s  z Field.__eq__cCst|tr?|j|jkst|dst|ds|j|jkSt|dt|dkr+t|d S|jjj|jjjf|jjj|jjjfkStSr) rsr/rrrrLrNrOrrrFrFrG__lt__ s    z Field.__lt__cCs<t|jt|dr |jjjndt|dr|jjjfSdfSr)hashrrrrLrNrOrarFrFrG__hash__szField.__hash__cCsNt|}|jrt|j|_t|jdr|jj|ur||j_||t|<|S)Nfield)copyrlrrr)rbmemodictrrFrFrG __deepcopy__&s  zField.__deepcopy__cCst}|j|_|j|_|SrJ)r.rR__dict__rrbrrFrFrG__copy__1s zField.__copy__cCsJt|ds|j}|ddt|jf|fSt|jjj |jjj |j ffS)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) rrrpoprUrRrQrrLrN object_namerf)rbstaterFrFrG __reduce__9s   zField.__reduce__cCs|jr|SdS)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)rn get_defaultrbinstancerFrFrGget_pk_value_on_saveMszField.get_pk_value_on_savecCs|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. rFrbrrFrFrG to_pythonXzField.to_pythoncCsg|j|jS)z Some validators can't be created at field initialization time. This method provides a way to delay their creation until required. )default_validatorsrrarFrFrGr `szField.validatorsc Cs||jvrdSg}|jD]3}z||Wq tjy?}zt|dr/|j|jvr/|j|j|_||j WYd}~q d}~ww|rGt|dS)Ncode) empty_valuesr r ValidationErrorrrrmessager error_list)rbrrverFrFrGrun_validatorshs    zField.run_validatorscCs|jsdS|jdurB||jvrB|jD]"\}}t|ttfr-|D] \}}||kr+dSqq||kr4dSqtj|jddd|id|durS|j sStj|jddd|j se||jvrgtj|jddddSdS)z Validate value and raise ValidationError if necessary. Subclasses should override this to provide validation logic. NrZrrrr[)rr\) rorxrrsrwtupler rrr[r\)rbrmodel_instance option_key option_value optgroup_keyoptgroup_valuerFrFrGvalidatexs. zField.validatecCs$||}||||||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. )rrrrbrr rFrFrGcleans   z Field.cleancCst|j|jjdS)Nqn_)rrops quote_namerbr rFrFrGdb_type_parameterszField.db_type_parameterscC4||}z |j||WStyYdSw)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)rdata_type_check_constraintsget_internal_typeKeyErrorrbr datarFrFrGdb_checks  zField.db_checkcCr)zk Return the database column data type for this field, for the provided connection. N)r data_typesrrrrFrFrGdb_types  z Field.db_typecCs ||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 rrFrFrG rel_db_types zField.rel_db_typecCs.|jj|}|r|||S||S)z3Return the data type to use in the Cast() function.)rcast_data_typesrrrr )rbr r rFrFrG cast_db_types zField.cast_db_typecCs||}||}||dS)z Extension of db_type(), providing a range of different return values (type, checks). This will look at db_type(), allowing custom model fields to override it. )typer)r r)rbr type_string check_stringrFrFrG db_parameterss  zField.db_parameterscCs|j|SrJ)data_types_suffixrrrrFrFrGdb_type_suffixszField.db_type_suffixcCst|dr |jgSgS)N from_db_value)rr*rrFrFrGget_db_converterss zField.get_db_converterscCs |jp|jSrJ)rkrirarFrFrGr] z Field.uniquecCs |jptjSrJ)r|rDEFAULT_INDEX_TABLESPACErarFrFrGrr,zField.db_tablespacecCdS)z Private API intended only to be used by Django itself. Currently only the PostgreSQL backend supports returning multiple fields on a model. FrFrarFrFrG db_returningrzField.db_returningcCsT|jp||_|\|_|_|jdu|_|jdur&|jr(|jdd|_dSdSdS)Nr` )rfget_attname_columnattnamecolumnconcretergr)rbrfrFrFrGset_attributes_from_names  zField.set_attributes_from_namecCs||||_|jj||d|jr$t||jds$t||j|||j durAd|j |j vrCt|d|j t |j |ddSdSdS)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. )privateNzget_%s_display)r)r5rrL add_fieldr3rr2setattrdescriptor_classrxrfrr_get_FIELD_display)rbrrf private_onlyrFrFrGcontribute_to_classs   zField.contribute_to_classcCs|jt||jiS)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. )rfrr2rrFrFrGget_filter_kwargs_for_object"sz"Field.get_filter_kwargs_for_objectcCs|jSrJ)rfrarFrFrG get_attname)szField.get_attnamecCs|}|jp|}||fSrJ)r>r{)rbr2r3rFrFrGr1,s zField.get_attname_columncCs|jjSrJ)rRrCrarFrFrGr1szField.get_internal_typecC t||jS)z(Return field's value just before saving.rr2)rbr addrFrFrGpre_save4r,zField.pre_savecCst|tr |}|S)zAPerform preliminary non-db specific value checks and conversions.)rsr_proxy____castrrFrFrGget_prep_value8s zField.get_prep_valuecCs|s||}|S)z Return field's value prepared for interacting with the database backend. Used by the default implementations of get_db_prep_save(). )rDrbrr preparedrFrFrGget_db_prep_value>s zField.get_db_prep_valuecCs|j||ddS)z9Return field's value prepared for saving into a database.F)r rF)rGrbrr rFrFrGget_db_prep_saveHszField.get_db_prep_savecCs |jtuS)z;Return a boolean of whether this field has a default value.)rnr5rarFrFrG has_defaultLs zField.has_defaultcCs|S)z(Return the default value for this field.)rrarFrFrGrPzField.get_defaultcs@rtjr jSfddSjrjrtjjstSt S)NcsjSrJ)rnrFrarFrGYsz$Field._get_default..) rJrrnempty_strings_allowedr[r rrrWrrarFrarGrTs  zField._get_defaultc s|jdurt|j}|rtdd|jD}|s||}|S|jj}|p'|}tt |jdr6|j j nd|j |}|rF|j|}|rJ|ngfdd|DS)z{ Return choices with a default blank choices included, for use as