WIP super dirty - change to descriptors and different tries
This commit is contained in:
@ -67,6 +67,11 @@ def populate_default_options_values(
|
||||
for name, field in new_model.Meta.model_fields.items()
|
||||
if field.__type__ == pydantic.Json
|
||||
}
|
||||
new_model._bytes_fields = {
|
||||
name
|
||||
for name, field in new_model.Meta.model_fields.items()
|
||||
if field.__type__ == bytes
|
||||
}
|
||||
|
||||
|
||||
class Connection(sqlite3.Connection):
|
||||
|
||||
@ -3,6 +3,7 @@ from typing import TYPE_CHECKING, Type, cast
|
||||
import ormar
|
||||
from ormar import ForeignKey, ManyToMany
|
||||
from ormar.fields import Through
|
||||
from ormar.models.descriptors import RelationDescriptor
|
||||
from ormar.models.helpers.sqlalchemy import adjust_through_many_to_many_model
|
||||
from ormar.relations import AliasManager
|
||||
|
||||
@ -130,6 +131,8 @@ def register_reverse_model_fields(model_field: "ForeignKeyField") -> None:
|
||||
orders_by=model_field.related_orders_by,
|
||||
skip_field=model_field.skip_reverse,
|
||||
)
|
||||
if not model_field.skip_reverse:
|
||||
setattr(model_field.to, related_name, RelationDescriptor(name=related_name))
|
||||
|
||||
|
||||
def register_through_shortcut_fields(model_field: "ManyToManyField") -> None:
|
||||
@ -160,6 +163,8 @@ def register_through_shortcut_fields(model_field: "ManyToManyField") -> None:
|
||||
owner=model_field.to,
|
||||
nullable=True,
|
||||
)
|
||||
setattr(model_field.owner, through_name, RelationDescriptor(name=through_name))
|
||||
setattr(model_field.to, through_name, RelationDescriptor(name=through_name))
|
||||
|
||||
|
||||
def register_relation_in_alias_manager(field: "ForeignKeyField") -> None:
|
||||
|
||||
@ -4,6 +4,7 @@ from typing import Dict, List, Optional, TYPE_CHECKING, Tuple, Type, Union
|
||||
import sqlalchemy
|
||||
|
||||
import ormar # noqa: I100, I202
|
||||
from ormar.models.descriptors import RelationDescriptor
|
||||
from ormar.models.helpers.pydantic import create_pydantic_field
|
||||
from ormar.models.helpers.related_names_validation import (
|
||||
validate_related_names_in_relations,
|
||||
@ -33,6 +34,7 @@ def adjust_through_many_to_many_model(model_field: "ManyToManyField") -> None:
|
||||
ondelete="CASCADE",
|
||||
owner=model_field.through,
|
||||
)
|
||||
|
||||
model_fields[child_name] = ormar.ForeignKey( # type: ignore
|
||||
model_field.owner,
|
||||
real_name=child_name,
|
||||
@ -50,6 +52,9 @@ def adjust_through_many_to_many_model(model_field: "ManyToManyField") -> None:
|
||||
create_pydantic_field(parent_name, model_field.to, model_field)
|
||||
create_pydantic_field(child_name, model_field.owner, model_field)
|
||||
|
||||
setattr(model_field.through, parent_name, RelationDescriptor(name=parent_name))
|
||||
setattr(model_field.through, child_name, RelationDescriptor(name=child_name))
|
||||
|
||||
|
||||
def create_and_append_m2m_fk(
|
||||
model: Type["Model"], model_field: "ManyToManyField", field_name: str
|
||||
|
||||
@ -1,3 +1,4 @@
|
||||
import base64
|
||||
import datetime
|
||||
import decimal
|
||||
import numbers
|
||||
@ -77,7 +78,10 @@ def convert_choices_if_needed( # noqa: CCR001
|
||||
)
|
||||
choices = [round(float(o), precision) for o in choices]
|
||||
elif field.__type__ == bytes:
|
||||
value = value if isinstance(value, bytes) else value.encode("utf-8")
|
||||
if field.represent_as_base64_str:
|
||||
value = value if isinstance(value, bytes) else base64.b64decode(value)
|
||||
else:
|
||||
value = value if isinstance(value, bytes) else value.encode("utf-8")
|
||||
|
||||
return value, choices
|
||||
|
||||
|
||||
Reference in New Issue
Block a user