B: Fix self-attribution after substitution

This commit is contained in:
Ivan 2025-11-07 12:53:32 +03:00
parent b6b9c62b43
commit fca8eb71e1
2 changed files with 21 additions and 4 deletions

View File

@ -276,7 +276,8 @@ class RSFormCached:
container_id = container_id if container_id is not None else attr.container_id
attr_id = orig_to_sub.get(attr.attribute_id)
attr_id = attr_id if attr_id is not None else attr.attribute_id
if not any(a.container_id == container_id and a.attribute_id == attr_id for a in attributions):
if attr_id != container_id and not any(
a.container_id == container_id and a.attribute_id == attr_id for a in attributions):
attr.attribute_id = attr_id
attr.container_id = container_id
attr.save()

View File

@ -1,7 +1,5 @@
''' Testing models: api_RSForm. '''
from django.forms import ValidationError
from apps.rsform.models import Constituenta, CstType, OrderManager, RSFormCached
from apps.rsform.models import Attribution, Constituenta, CstType, OrderManager, RSFormCached
from apps.users.models import User
from shared.DBTester import DBTester
@ -170,6 +168,24 @@ class TestRSFormCached(DBTester):
self.assertEqual(d1.definition_formal, x2.alias)
def test_substitute_attributions(self):
x1 = self.schema.insert_last(alias='X1')
x2 = self.schema.insert_last(alias='X2')
d1 = self.schema.insert_last(alias='D1')
d2 = self.schema.insert_last(alias='D2')
Attribution.objects.create(container=x1, attribute=d2)
Attribution.objects.create(container=x2, attribute=d2)
Attribution.objects.create(container=x1, attribute=x2)
Attribution.objects.create(container=x1, attribute=d1)
self.schema.substitute([(x1, x2)])
self.assertEqual(self.schema.constituentsQ().count(), 3)
self.assertEqual(Attribution.objects.filter(container__schema=self.schema.model).count(), 2)
self.assertTrue(Attribution.objects.filter(container=x2, attribute=d2).exists())
self.assertTrue(Attribution.objects.filter(container=x2, attribute=d1).exists())
def test_restore_order(self):
d2 = self.schema.insert_last(
alias='D2',