# models.helpers.models #### is\_field\_an\_forward\_ref ```python is_field_an_forward_ref(field: Type["BaseField"]) -> bool ``` Checks if field is a relation field and whether any of the referenced models are ForwardRefs that needs to be updated before proceeding. **Arguments**: - `field (Type[BaseField])`: model field to verify **Returns**: `(bool)`: result of the check #### populate\_default\_options\_values ```python populate_default_options_values(new_model: Type["Model"], model_fields: Dict) -> None ``` Sets all optional Meta values to it's defaults and set model_fields that were already previously extracted. Here should live all options that are not overwritten/set for all models. Current options are: * constraints = [] * abstract = False **Arguments**: - `new_model (Model class)`: newly constructed Model - `model_fields (Union[Dict[str, type], Dict])`: #### extract\_annotations\_and\_default\_vals ```python extract_annotations_and_default_vals(attrs: Dict) -> Tuple[Dict, Dict] ``` Extracts annotations from class namespace dict and triggers extraction of ormar model_fields. **Arguments**: - `attrs (Dict)`: namespace of the class created **Returns**: `(Tuple[Dict, Dict])`: namespace of the class updated, dict of extracted model_fields #### validate\_related\_names\_in\_relations ```python validate_related_names_in_relations(model_fields: Dict, new_model: Type["Model"]) -> None ``` Performs a validation of relation_names in relation fields. If multiple fields are leading to the same related model only one can have empty related_name param (populated by default as model.name.lower()+'s'). Also related_names have to be unique for given related model. **Raises**: - `ModelDefinitionError`: if validation of related_names fail **Arguments**: - `model_fields (Dict[str, ormar.Field])`: dictionary of declared ormar model fields - `new_model (Model class)`: #### group\_related\_list ```python group_related_list(list_: List) -> Dict ``` Translates the list of related strings into a dictionary. That way nested models are grouped to traverse them in a right order and to avoid repetition. Sample: ["people__houses", "people__cars__models", "people__cars__colors"] will become: {'people': {'houses': [], 'cars': ['models', 'colors']}} Result dictionary is sorted by length of the values and by key **Arguments**: - `list_ (List[str])`: list of related models used in select related **Returns**: `(Dict[str, List])`: list converted to dictionary to avoid repetition and group nested models