F: Implement constituenta mark for backend

This commit is contained in:
Ivan 2025-07-29 13:45:53 +03:00
parent 97fe805e14
commit e69638799a
7 changed files with 41 additions and 6 deletions

View File

@ -121,7 +121,8 @@ class TestChangeConstituents(EndpointTester):
'term_raw': 'Test1',
'definition_formal': r'X4\X4',
'definition_raw': '@{X5|sing,datv}',
'convention': 'test'
'convention': 'test',
'crucial': True,
}
}
response = self.executeOK(data=data, schema=self.ks1.model.pk)
@ -132,9 +133,11 @@ class TestChangeConstituents(EndpointTester):
self.assertEqual(self.ks1X1.definition_formal, data['item_data']['definition_formal'])
self.assertEqual(self.ks1X1.definition_raw, data['item_data']['definition_raw'])
self.assertEqual(self.ks1X1.convention, data['item_data']['convention'])
self.assertEqual(self.ks1X1.crucial, data['item_data']['crucial'])
self.assertEqual(d2.definition_resolved, data['item_data']['term_raw'])
self.assertEqual(inherited_cst.term_raw, data['item_data']['term_raw'])
self.assertEqual(inherited_cst.convention, data['item_data']['convention'])
self.assertEqual(inherited_cst.crucial, False)
self.assertEqual(inherited_cst.definition_formal, r'X1\X1')
self.assertEqual(inherited_cst.definition_raw, r'@{X2|sing,datv}')

View File

@ -8,5 +8,5 @@ from . import models
class ConstituentaAdmin(admin.ModelAdmin):
''' Admin model: Constituenta. '''
ordering = ['schema', 'order']
list_display = ['schema', 'order', 'alias', 'term_resolved', 'definition_resolved']
list_display = ['schema', 'order', 'alias', 'term_resolved', 'definition_resolved', 'crucial']
search_fields = ['term_resolved', 'definition_resolved']

View File

@ -0,0 +1,18 @@
# Generated by Django 5.2.4 on 2025-07-29 09:01
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('rsform', '0003_alter_constituenta_order'),
]
operations = [
migrations.AddField(
model_name='constituenta',
name='crucial',
field=models.BooleanField(default=False, verbose_name='Ключевая'),
),
]

View File

@ -4,6 +4,7 @@ import re
from cctext import extract_entities
from django.db.models import (
CASCADE,
BooleanField,
CharField,
ForeignKey,
JSONField,
@ -103,6 +104,10 @@ class Constituenta(Model):
default='',
blank=True
)
crucial = BooleanField(
verbose_name='Ключевая',
default=False
)
class Meta:
''' Model metadata. '''

View File

@ -144,6 +144,7 @@ class RSForm:
self.cache.ensure_loaded()
position = self.cache.constituents.index(self.cache.by_id[insert_after.pk]) + 1
result = self.insert_new(data['alias'], data['cst_type'], position)
result.crucial = data.get('crucial', False)
result.convention = data.get('convention', '')
result.definition_formal = data.get('definition_formal', '')
result.term_forms = data.get('term_forms', [])
@ -247,6 +248,9 @@ class RSForm:
else:
old_data['convention'] = cst.convention
cst.convention = data['convention']
if 'crucial' in data:
cst.crucial = data['crucial']
del data['crucial']
if 'definition_formal' in data:
if cst.definition_formal == data['definition_formal']:
del data['definition_formal']

View File

@ -46,12 +46,13 @@ class CstUpdateSerializer(StrictSerializer):
class Meta:
''' serializer metadata. '''
model = Constituenta
fields = 'alias', 'cst_type', 'convention', 'definition_formal', 'definition_raw', 'term_raw', 'term_forms'
fields = 'alias', 'cst_type', 'convention', 'crucial', 'definition_formal', \
'definition_raw', 'term_raw', 'term_forms'
target = PKField(
many=False,
queryset=Constituenta.objects.all().only(
'alias', 'cst_type', 'convention', 'definition_formal', 'definition_raw', 'term_raw')
'alias', 'cst_type', 'convention', 'crucial', 'definition_formal', 'definition_raw', 'term_raw')
)
item_data = ConstituentaUpdateData()
@ -96,7 +97,7 @@ class CstCreateSerializer(StrictModelSerializer):
''' serializer metadata. '''
model = Constituenta
fields = \
'alias', 'cst_type', 'convention', \
'alias', 'cst_type', 'convention', 'crucial', \
'term_raw', 'definition_raw', 'definition_formal', \
'insert_after', 'term_forms'

View File

@ -225,7 +225,9 @@ class TestRSFormViewset(EndpointTester):
'cst_type': CstType.BASE,
'insert_after': x2.pk,
'term_raw': 'test',
'term_forms': [{'text': 'form1', 'tags': 'sing,datv'}]
'term_forms': [{'text': 'form1', 'tags': 'sing,datv'}],
'definition_formal': 'invalid',
'crucial': True
}
response = self.executeCreated(data=data, item=self.owned_id)
self.assertEqual(response.data['new_cst']['alias'], data['alias'])
@ -233,6 +235,8 @@ class TestRSFormViewset(EndpointTester):
self.assertEqual(x4.order, 2)
self.assertEqual(x4.term_raw, data['term_raw'])
self.assertEqual(x4.term_forms, data['term_forms'])
self.assertEqual(x4.definition_formal, data['definition_formal'])
self.assertEqual(x4.crucial, data['crucial'])
data = {
'alias': 'X5',