ManyToMany class¶
edgy.fields.ManyToManyField
¶
Bases: ForeignKeyFieldFactory, list
A factory for creating ManyToManyField instances in Edgy models.
This factory ensures proper validation and default settings for Many-to-Many
fields, including the through_tablename and disallowing server-side defaults.
methods_overwritable_by_factory
class-attribute
instance-attribute
¶
build_field
classmethod
¶
Constructs and returns a new field instance based on the factory's configuration.
This method orchestrates the creation of a BaseFieldType instance.
It determines the column type, Pydantic type, and constraints from the
provided kwargs and the factory's properties. It then instantiates
the field and calls overwrite_methods to apply any factory-defined
method overrides.
| PARAMETER | DESCRIPTION |
|---|---|
**kwargs
|
Keyword arguments for configuring the field.
TYPE:
|
| RETURNS | DESCRIPTION |
|---|---|
BaseFieldType
|
The newly constructed and configured field instance.
TYPE:
|
Source code in edgy/core/db/fields/factories.py
overwrite_methods
classmethod
¶
Overwrites methods on the given field_obj with methods defined in the factory.
This method iterates through the factory's own methods. If a method's name
is present in methods_overwritable_by_factory, it replaces the corresponding
method on the field_obj. It handles class methods and ensures proper
staticmethod wrapping for consistent behavior across Python versions.
| PARAMETER | DESCRIPTION |
|---|---|
field_obj
|
The field instance whose methods are to be overwritten.
TYPE:
|
Source code in edgy/core/db/fields/factories.py
repack
classmethod
¶
Repacks methods on the given field_obj that were previously overwritten
by the factory.
This method is used to re-apply the partial and staticmethod wrappers
to methods that were already overwritten. This can be necessary in scenarios
where field objects are serialized/deserialized or otherwise lose their
original method bindings. It ensures that the context (cls, field_obj)
remains correctly bound.
| PARAMETER | DESCRIPTION |
|---|---|
field_obj
|
The field instance whose methods are to be repacked.
TYPE:
|
Source code in edgy/core/db/fields/factories.py
get_constraints
classmethod
¶
Returns a sequence of constraints applicable to the column.
This method can be overridden by subclasses to provide specific database constraints for the column associated with this field type.
| PARAMETER | DESCRIPTION |
|---|---|
kwargs
|
Keyword arguments provided during field creation.
TYPE:
|
| RETURNS | DESCRIPTION |
|---|---|
Sequence[Any]
|
Sequence[Any]: A sequence of constraint objects. |
Source code in edgy/core/db/fields/factories.py
get_column_type
classmethod
¶
Returns the SQL column type for the field.
For regular fields, this will return the appropriate SQLAlchemy column type.
For meta fields (fields that don't directly map to a database column),
it should return None.
| PARAMETER | DESCRIPTION |
|---|---|
kwargs
|
Keyword arguments provided during field creation.
TYPE:
|
| RETURNS | DESCRIPTION |
|---|---|
Any
|
The SQLAlchemy column type or
TYPE:
|
Source code in edgy/core/db/fields/factories.py
get_pydantic_type
classmethod
¶
Returns the Pydantic type for the field.
This type is used by Pydantic for validation and serialization. By default,
it returns the field_type attribute of the factory.
| PARAMETER | DESCRIPTION |
|---|---|
kwargs
|
Keyword arguments provided during field creation.
TYPE:
|
| RETURNS | DESCRIPTION |
|---|---|
Any
|
The Pydantic type associated with the field.
TYPE:
|
Source code in edgy/core/db/fields/factories.py
_get_field_cls
cached
staticmethod
¶
Internal static method to dynamically create and cache the actual field class.
This method uses lru_cache to ensure that the field class is created
only once for each FieldFactory type. It constructs a new type based
on the FieldFactory's __name__ and field_bases.
| PARAMETER | DESCRIPTION |
|---|---|
cls
|
The
TYPE:
|
| RETURNS | DESCRIPTION |
|---|---|
BaseFieldType
|
The dynamically created and cached field class.
TYPE:
|
Source code in edgy/core/db/fields/factories.py
__new__
¶
__new__(
to,
*,
to_fields=(),
to_foreign_key="",
from_fields=(),
from_foreign_key="",
through="",
through_tablename=NEW_M2M_NAMING,
embed_through=False,
**kwargs,
)
Creates a new ManyToManyField instance.
| PARAMETER | DESCRIPTION |
|---|---|
to
|
The target model class or its string name.
TYPE:
|
to_fields
|
Fields on the
TYPE:
|
to_foreign_key
|
The name of the foreign key field in the
TYPE:
|
from_fields
|
Fields on the
TYPE:
|
from_foreign_key
|
The name of the foreign key field in the
TYPE:
|
through
|
The intermediate model.
TYPE:
|
through_tablename
|
The name of the database table for the
TYPE:
|
embed_through
|
If a string, embeds the
TYPE:
|
**kwargs
|
Additional keyword arguments.
TYPE:
|
| RETURNS | DESCRIPTION |
|---|---|
BaseFieldType
|
The constructed
TYPE:
|
Source code in edgy/core/db/fields/many_to_many.py
validate
classmethod
¶
Validates the parameters for a ManyToManyField field.
Enforces rules specific to Many-to-Many fields, such as disallowing
server-side defaults/updates and ensuring through_tablename is set
correctly. It also sets default values for null, exclude, on_delete,
and on_update.
| PARAMETER | DESCRIPTION |
|---|---|
kwargs
|
The dictionary of keyword arguments passed during field construction.
TYPE:
|
| RAISES | DESCRIPTION |
|---|---|
FieldDefinitionError
|
If any validation rule is violated. |