Skip to content

fields.base

BaseField Objects

1
class BaseField(FieldInfo)

BaseField serves as a parent class for all basic Fields in ormar. It keeps all common parameters available for all fields as well as set of useful functions.

All values are kept as class variables, ormar Fields are never instantiated. Subclasses pydantic.FieldInfo to keep the fields related to pydantic field types like ConstrainedStr

is_valid_uni_relation

1
 | is_valid_uni_relation() -> bool

Checks if field is a relation definition but only for ForeignKey relation, so excludes ManyToMany fields, as well as virtual ForeignKey (second side of FK relation).

Is used to define if a field is a db ForeignKey column that should be saved/populated when dealing with internal/own Model columns only.

Returns:

result of the check :rtype: bool

get_alias

1
 | get_alias() -> str

Used to translate Model column names to database column names during db queries.

Returns:

returns custom database column name if defined by user, otherwise field name in ormar/pydantic :rtype: str

get_pydantic_default

1
 | get_pydantic_default() -> Dict

Generates base pydantic.FieldInfo with only default and optionally required to fix pydantic Json field being set to required=False. Used in an ormar Model Metaclass.

Returns:

instance of base pydantic.FieldInfo :rtype: pydantic.FieldInfo

default_value

1
 | default_value(use_server: bool = False) -> Optional[Dict]

Returns a FieldInfo instance with populated default (static) or default_factory (function). If the field is a autoincrement primary key the default is None. Otherwise field have to has either default, or default_factory populated.

If all default conditions fail None is returned.

Used in converting to pydantic FieldInfo.

Arguments:

  • use_server: flag marking if server_default should be treated as default value, default False :type use_server: bool

Returns:

returns a call to pydantic.Field which is returning a FieldInfo instance :rtype: Optional[pydantic.FieldInfo]

get_default

1
 | get_default(use_server: bool = False) -> Any

Return default value for a field. If the field is Callable the function is called and actual result is returned. Used to populate default_values for pydantic Model in ormar Model Metaclass.

Arguments:

  • use_server: flag marking if server_default should be treated as default value, default False :type use_server: bool

Returns:

default value for the field if set, otherwise implicit None :rtype: Any

has_default

1
 | has_default(use_server: bool = True) -> bool

Checks if the field has default value set.

Arguments:

  • use_server: flag marking if server_default should be treated as default value, default False :type use_server: bool

Returns:

result of the check if default value is set :rtype: bool

is_auto_primary_key

1
 | is_auto_primary_key() -> bool

Checks if field is first a primary key and if it, it's than check if it's set to autoincrement. Autoincrement primary_key is nullable/optional.

Returns:

result of the check for primary key and autoincrement :rtype: bool

construct_constraints

1
 | construct_constraints() -> List

Converts list of ormar constraints into sqlalchemy ForeignKeys. Has to be done dynamically as sqlalchemy binds ForeignKey to the table. And we need a new ForeignKey for subclasses of current model

Returns:

List of sqlalchemy foreign keys - by default one. :rtype: List[sqlalchemy.schema.ForeignKey]

get_column

1
 | get_column(name: str) -> sqlalchemy.Column

Returns definition of sqlalchemy.Column used in creation of sqlalchemy.Table. Populates name, column type constraints, as well as a number of parameters like primary_key, index, unique, nullable, default and server_default.

Arguments:

  • name: name of the db column - used if alias is not set :type name: str

Returns:

actual definition of the database column as sqlalchemy requires. :rtype: sqlalchemy.Column

_get_encrypted_column

1
 | _get_encrypted_column(name: str) -> sqlalchemy.Column

Returns EncryptedString column type instead of actual column.

Arguments:

  • name: column name :type name: str

Returns:

newly defined column :rtype: sqlalchemy.Column

expand_relationship

1
 | expand_relationship(value: Any, child: Union["Model", "NewBaseModel"], to_register: bool = True) -> Any

Function overwritten for relations, in basic field the value is returned as is. For relations the child model is first constructed (if needed), registered in relation and returned. For relation fields the value can be a pk value (Any type of field), dict (from Model) or actual instance/list of a "Model".

Arguments:

  • value: a Model field value, returned untouched for non relation fields. :type value: Any
  • child: a child Model to register :type child: Union["Model", "NewBaseModel"]
  • to_register: flag if the relation should be set in RelationshipManager :type to_register: bool

Returns:

returns untouched value for normal fields, expands only for relations :rtype: Any

set_self_reference_flag

1
 | set_self_reference_flag() -> None

Sets self_reference to True if field to and owner are same model.

Returns:

None :rtype: None

has_unresolved_forward_refs

1
 | has_unresolved_forward_refs() -> bool

Verifies if the filed has any ForwardRefs that require updating before the model can be used.

Returns:

result of the check :rtype: bool

evaluate_forward_ref

1
 | evaluate_forward_ref(globalns: Any, localns: Any) -> None

Evaluates the ForwardRef to actual Field based on global and local namespaces

Arguments:

  • globalns: global namespace :type globalns: Any
  • localns: local namespace :type localns: Any

Returns:

None :rtype: None

1
 | get_related_name() -> str

Returns name to use for reverse relation. It's either set as related_name or by default it's owner model. get_name + 's'

Returns:

name of the related_name or default related name. :rtype: str