how is your is_relation_possible() looks like?
Thinking something like this:
class RelationManager(models.Manager):
def relation_not_possible(self, group_id, parent_id, children_id):
person = Person.objects.get(pk=parent_id)
return person.child_relations.filter(parent_id=parent_id, group_id=group_id).first()
class Relation(models.Model):
group_id = IntegerField(null=True)
parent = ForeignKey(Person, related_name="parent_relations", on_delete=models.PROTECT)
children = ForeignKey(Person, related_name="child_relations", on_delete=models.PROTECT)
objects = RelationManager()
class Meta:
unique_together = ('group', 'parent', 'children')