upd defult editing field sequences generation when ownership fields defined

This commit is contained in:
Alexander Kalinovsky
2025-03-13 16:52:03 +07:00
parent 02aec23b84
commit f0db2b2830
17 changed files with 223 additions and 70 deletions

View File

@@ -12,6 +12,7 @@ from typing import (
dataclass_transform,
)
from pydantic import BaseModel
from pydantic_core import PydanticUndefined
from sqlmodel import SQLModel, BigInteger, Field, select, func, column, col
from sqlmodel.main import FieldInfo
from sqlmodel.ext.asyncio.session import AsyncSession
@@ -64,7 +65,16 @@ class BotEntityMetaclass(SQLModelMetaclass):
if attribute_value:
if isinstance(attribute_value, EntityField):
descriptor_kwargs = attribute_value.__dict__.copy()
sm_descriptor = descriptor_kwargs.pop("sm_descriptor", None)
sm_descriptor = descriptor_kwargs.pop("sm_descriptor", None) # type: FieldInfo
if attribute_value.default is not None:
if (
sm_descriptor
and sm_descriptor.default is PydanticUndefined
):
sm_descriptor.default = attribute_value.default
else:
sm_descriptor = Field(default=attribute_value.default)
if sm_descriptor:
namespace[annotation] = sm_descriptor
@@ -157,22 +167,22 @@ class BotEntityMetaclass(SQLModelMetaclass):
fields_descriptors=bot_fields_descriptors,
)
descriptor_fields_sequence = [
key
for key, val in bot_fields_descriptors.items()
if not (val.is_optional or val.name == "id")
]
# descriptor_fields_sequence = [
# key
# for key, val in bot_fields_descriptors.items()
# if not (val.is_optional or val.name == "id" or val.name[:-3] == "_id")
# ]
entity_descriptor: EntityDescriptor = namespace["bot_entity_descriptor"]
# entity_descriptor: EntityDescriptor = namespace["bot_entity_descriptor"]
if entity_descriptor.default_form.edit_field_sequence is None:
entity_descriptor.default_form.edit_field_sequence = (
descriptor_fields_sequence
)
# if entity_descriptor.default_form.edit_field_sequence is None:
# entity_descriptor.default_form.edit_field_sequence = (
# descriptor_fields_sequence
# )
for form in entity_descriptor.forms.values():
if form.edit_field_sequence is None:
form.edit_field_sequence = descriptor_fields_sequence
# for form in entity_descriptor.forms.values():
# if form.edit_field_sequence is None:
# form.edit_field_sequence = descriptor_fields_sequence
for field_descriptor in bot_fields_descriptors.values():
field_descriptor.entity_descriptor = namespace["bot_entity_descriptor"]

View File

@@ -93,7 +93,7 @@ class _BaseFieldDescriptor:
description: str | LazyProxy | EntityFieldCaptionCallable | None = None
edit_prompt: str | LazyProxy | EntityFieldCaptionCallable | None = None
caption_value: EntityFieldCaptionCallable | None = None
is_visible: bool = True
is_visible: bool | None = None
localizable: bool = False
bool_false_value: str | LazyProxy = "no"
bool_true_value: str | LazyProxy = "yes"
@@ -204,6 +204,7 @@ class CommandCallbackContext[UT: UserBase]:
class EntityEventContext:
db_session: AsyncSession
app: "QBotApp"
message: Message | CallbackQuery | None = None
@dataclass(kw_only=True)