Skip to content
Snippets Groups Projects
Verified Commit 6d843009 authored by Nik | Klampfradler's avatar Nik | Klampfradler
Browse files

Use more specific helper methods

parent 3fd88ce6
No related branches found
No related tags found
1 merge request!305Allow adding a foreign key to Exensible Model
Pipeline #2653 passed
...@@ -223,7 +223,6 @@ class ExtensibleModel(models.Model, metaclass=_ExtensibleModelBase): ...@@ -223,7 +223,6 @@ class ExtensibleModel(models.Model, metaclass=_ExtensibleModelBase):
id_field = to_field_type() id_field = to_field_type()
self.field(**{id_field_name: id_field}) self.field(**{id_field_name: id_field})
@property
def _virtual_fk(self) -> Optional[models.Model]: def _virtual_fk(self) -> Optional[models.Model]:
id_field_val = getattr(self, id_field_name) id_field_val = getattr(self, id_field_name)
if id_field_val: if id_field_val:
...@@ -237,6 +236,10 @@ class ExtensibleModel(models.Model, metaclass=_ExtensibleModelBase): ...@@ -237,6 +236,10 @@ class ExtensibleModel(models.Model, metaclass=_ExtensibleModelBase):
else: else:
return None return None
# Add property to wrap get/set on foreign mdoel instance
cls.property(_virtual_fk, field_name)
_virtual_fk = getattr(cls, field_name)
@_virtual_fk.setter @_virtual_fk.setter
def _virtual_fk(self, value: Optional[Model] = None) -> None: def _virtual_fk(self, value: Optional[Model] = None) -> None:
if value is None: if value is None:
...@@ -245,13 +248,9 @@ class ExtensibleModel(models.Model, metaclass=_ExtensibleModelBase): ...@@ -245,13 +248,9 @@ class ExtensibleModel(models.Model, metaclass=_ExtensibleModelBase):
id_field_val = getattr(value, to_field) id_field_val = getattr(value, to_field)
setattr(self, id_field_name, id_field_val) setattr(self, id_field_name, id_field_val)
# Add property to wrap get/set on foreign mdoel instance
cls._safe_add(_virtual_fk, field_name)
# Add related property on foreign model instance if it provides such an interface # Add related property on foreign model instance if it provides such an interface
if hasattr(to, "_safe_add"): if hasattr(to, "_safe_add"):
@property
def _virtual_related(self) -> Optional[models.Model]: def _virtual_related(self) -> Optional[models.Model]:
id_field_val = getattr(self, to_field) id_field_val = getattr(self, to_field)
try: try:
...@@ -260,7 +259,7 @@ class ExtensibleModel(models.Model, metaclass=_ExtensibleModelBase): ...@@ -260,7 +259,7 @@ class ExtensibleModel(models.Model, metaclass=_ExtensibleModelBase):
# Nothing references us # Nothing references us
return None return None
to._safe_add(_virtual_related, related_name) to.property(_virtual_related, related_name)
@classmethod @classmethod
def syncable_fields(cls) -> List[models.Field]: def syncable_fields(cls) -> List[models.Field]:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment