From bc41823dc376627e37c86e60d4bfb9a4ec0d4be1 Mon Sep 17 00:00:00 2001 From: ewandor Date: Sun, 27 Apr 2025 01:21:05 +0200 Subject: [PATCH] =?UTF-8?q?Cr=C3=A9ating=20an=20official=20foreign=20key?= =?UTF-8?q?=20field?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/rpk-api/firm/contract/models.py | 37 +++++++---------------------- api/rpk-api/firm/core/models.py | 14 +++++++++++ 2 files changed, 22 insertions(+), 29 deletions(-) diff --git a/api/rpk-api/firm/contract/models.py b/api/rpk-api/firm/contract/models.py index f30ca95..5cf999f 100644 --- a/api/rpk-api/firm/contract/models.py +++ b/api/rpk-api/firm/contract/models.py @@ -6,7 +6,7 @@ from uuid import UUID from beanie import PydanticObjectId from pydantic import BaseModel, Field -from firm.core.models import CrudDocument, RichtextSingleline, RichtextMultiline, DictionaryEntry +from firm.core.models import CrudDocument, RichtextSingleline, RichtextMultiline, DictionaryEntry, ForeignKey from firm.core.filter import Filter, FilterSchema from firm.entity.models import Entity @@ -25,27 +25,10 @@ class ContractDraftStatus(str, Enum): class DraftParty(BaseModel): - entity_id: PydanticObjectId = Field( - foreignKey={ - "reference": { - "resource": "entities", - "schema": "Entity", - } - }, - default="", - title="Partie" - ) + entity_id: PydanticObjectId = ForeignKey("entities", "Entity", default="", title="Partie") + entity: SkipJsonSchema[Entity] = Field(default=None, exclude=True, ) part: str = Field(title="Rôle") - representative_id: PydanticObjectId = Field( - foreignKey={ - "reference": { - "resource": "entities", - "schema": "Entity", - } - }, - default="", - title="Représentant" - ) + representative_id: PydanticObjectId = ForeignKey("entities", "Entity", default="", title="Représentant") class Config: title = 'Partie' @@ -74,14 +57,10 @@ class ProvisionGenuine(BaseModel): class ContractProvisionTemplateReference(BaseModel): type: Literal['template'] = ContractProvisionType.template - provision_template_id: PydanticObjectId = Field( - foreignKey={ - "reference": { - "resource": "templates/provisions", - "schema": "ProvisionTemplate", - "displayedFields": ['title', 'body'] - }, - }, + provision_template_id: PydanticObjectId = ForeignKey( + "templates/provisions", + "ProvisionTemplate", + displayed_fields=['title', 'body'], props={"parametrized": True}, default="", title="Template de clause" diff --git a/api/rpk-api/firm/core/models.py b/api/rpk-api/firm/core/models.py index f1d9d88..6b2f15e 100644 --- a/api/rpk-api/firm/core/models.py +++ b/api/rpk-api/firm/core/models.py @@ -114,6 +114,20 @@ def RichtextSingleline(*args, **kwargs): return Field(*args, **kwargs) +def ForeignKey(resource, schema, displayed_fields=None, *args, **kwargs): + kwargs["foreignKey"] = { + "reference": { + "resource": resource, + "schema": schema, + } + } + + if displayed_fields: + kwargs["foreignKey"]["reference"]["displayedFields"] = displayed_fields + + return Field(*args, **kwargs) + + class DictionaryEntry(BaseModel): key: str value: str = ""