cards: do not let id/text fields overwrite native values (#60101)
This commit is contained in:
parent
997bfc5898
commit
d6128fa526
|
@ -5452,6 +5452,50 @@ def test_item_field_from_cards(pub):
|
|||
assert formdef.data_class().select()[0].data['0_structured']['name'] == 'bar'
|
||||
|
||||
|
||||
def test_item_field_from_cards_id_identifier(pub):
|
||||
create_user(pub)
|
||||
formdef = create_formdef()
|
||||
formdef.data_class().wipe()
|
||||
|
||||
CardDef.wipe()
|
||||
carddef = CardDef()
|
||||
carddef.name = 'items'
|
||||
carddef.digest_templates = {'default': '{{form_var_name}}'}
|
||||
carddef.fields = [
|
||||
fields.StringField(id='0', label='string', varname='name'),
|
||||
fields.StringField(id='1', label='string', varname='id'),
|
||||
]
|
||||
carddef.store()
|
||||
carddef.data_class().wipe()
|
||||
for i, value in enumerate(['foo', 'bar', 'baz']):
|
||||
carddata = carddef.data_class()()
|
||||
carddata.data = {
|
||||
'0': value,
|
||||
'1': 'attr%s' % i,
|
||||
}
|
||||
carddata.just_created()
|
||||
carddata.store()
|
||||
|
||||
ds = {'type': 'carddef:%s' % carddef.url_name}
|
||||
formdef.fields = [
|
||||
fields.ItemField(id='0', label='string', type='item', data_source=ds, display_disabled_items=True)
|
||||
]
|
||||
formdef.store()
|
||||
|
||||
resp = get_app(pub).get('/test/')
|
||||
assert resp.form['f0'].options == [
|
||||
('2', False, 'bar'),
|
||||
('3', False, 'baz'),
|
||||
('1', False, 'foo'),
|
||||
]
|
||||
resp.form['f0'] = '2'
|
||||
resp = resp.form.submit('submit') # -> validation page
|
||||
resp = resp.form.submit('submit') # -> submit
|
||||
assert formdef.data_class().select()[0].data['0'] == '2'
|
||||
assert formdef.data_class().select()[0].data['0_display'] == 'bar'
|
||||
assert formdef.data_class().select()[0].data['0_structured']['name'] == 'bar'
|
||||
|
||||
|
||||
def test_item_field_from_cards_then_comment_related_card(pub):
|
||||
# https://dev.entrouvert.org/issues/58292
|
||||
create_user(pub)
|
||||
|
|
|
@ -49,7 +49,7 @@ class CardData(FormData):
|
|||
'text': (self.digests or {}).get(digest_key) or '',
|
||||
}
|
||||
for field in self.formdef.get_all_fields():
|
||||
if not field.varname:
|
||||
if not field.varname or field.varname in ('id', 'text'):
|
||||
continue
|
||||
value = self.data and self.data.get(field.id)
|
||||
if isinstance(value, str):
|
||||
|
|
Loading…
Reference in New Issue