Skip to content
Snippets Groups Projects
Verified Commit 9202d5f8 authored by Jonathan Weth's avatar Jonathan Weth :keyboard:
Browse files

Fix syntax errors and property creation in foreign_key helper

parent df039094
No related branches found
No related tags found
1 merge request!305Allow adding a foreign key to Exensible Model
Pipeline #2861 canceled
...@@ -233,8 +233,9 @@ class ExtensibleModel(models.Model, metaclass=_ExtensibleModelBase): ...@@ -233,8 +233,9 @@ class ExtensibleModel(models.Model, metaclass=_ExtensibleModelBase):
# Add field to hold key to foreign model # Add field to hold key to foreign model
id_field = to_field_type() id_field = to_field_type()
self.field(**{id_field_name: id_field}) cls.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:
...@@ -248,18 +249,17 @@ class ExtensibleModel(models.Model, metaclass=_ExtensibleModelBase): ...@@ -248,18 +249,17 @@ class ExtensibleModel(models.Model, metaclass=_ExtensibleModelBase):
else: else:
return None return None
# Add property to wrap get/set on foreign model 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[models.Model] = None) -> None:
if value is None: if value is None:
id_field_val = None id_field_val = None
else: else:
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 model 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"):
...@@ -267,7 +267,7 @@ class ExtensibleModel(models.Model, metaclass=_ExtensibleModelBase): ...@@ -267,7 +267,7 @@ class ExtensibleModel(models.Model, metaclass=_ExtensibleModelBase):
id_field_val = getattr(self, to_field) id_field_val = getattr(self, to_field)
return cls.objects.filter(**{id_field_name: id_field_val}) return cls.objects.filter(**{id_field_name: id_field_val})
to.property(_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