ConceptPortal-public/rsconcept/backend/apps/oss/models/Inheritance.py

66 lines
2.1 KiB
Python
Raw Normal View History

''' Models: Synthesis Inheritance. '''
from django.db.models import CASCADE, ForeignKey, Model
from .Substitution import Substitution
class Inheritance(Model):
''' Inheritance links parent and child constituents in synthesis operation.'''
operation = ForeignKey(
2024-08-02 11:17:14 +03:00
verbose_name='Операция',
to='oss.Operation',
on_delete=CASCADE,
related_name='inheritances'
)
parent = ForeignKey(
verbose_name='Исходная конституента',
to='rsform.Constituenta',
on_delete=CASCADE,
related_name='as_parent'
)
child = ForeignKey(
verbose_name='Наследованная конституента',
to='rsform.Constituenta',
on_delete=CASCADE,
related_name='as_child'
)
class Meta:
''' Model metadata. '''
verbose_name = 'Наследование синтеза'
verbose_name_plural = 'Отношение наследования конституент'
2024-07-25 21:19:15 +03:00
unique_together = [['parent', 'child']]
def __str__(self) -> str:
return f'{self.parent} -> {self.child}'
@staticmethod
def check_share_origin(cst1: int, cst2: int) -> bool:
''' Check if two constituents share origin. '''
inheritance1 = Inheritance.objects.filter(child_id=cst1).first()
if not inheritance1:
return False
inheritance2 = Inheritance.objects.filter(child_id=cst2).first()
if not inheritance2:
return False
parent1 = inheritance1.parent
parent2 = inheritance2.parent
origins1 = list(
Substitution.objects.filter(
substitution=parent1).values_list(
'original__schema_id',
flat=True))
origins1.append(parent1.schema_id)
origins2 = list(
Substitution.objects.filter(
substitution=parent2).values_list(
'original__schema_id',
flat=True))
origins2.append(parent2.schema_id)
return any(x in origins1 for x in origins2)