Projet

Général

Profil

0001-fields-get-item-display-value-from-database-72299.patch

Frédéric Péters, 12 décembre 2022 17:29

Télécharger (3,73 ko)

Voir les différences:

Subject: [PATCH] fields: get item display value from database (#72299)

 tests/form_pages/test_all.py | 21 ++++++++++++++++++++-
 wcs/fields.py                | 19 +++++++++++--------
 2 files changed, 31 insertions(+), 9 deletions(-)
tests/form_pages/test_all.py
6223 6223
    for carddata in carddef.data_class().select():
6224 6224
        carddata.store()
6225 6225

  
6226
    resp = get_app(pub).get('/test/')
6226
    app = get_app(pub)
6227
    resp = app.get('/test/')
6227 6228
    assert len(resp.form['f0'].options) == 10
6228 6229
    assert {x[0] for x in resp.form['f0'].options} == baz_ids
6229 6230
    resp.form['f0'].value = baz_id
......
6232 6233
    assert formdef.data_class().select()[0].data['0'] == baz_id
6233 6234
    assert formdef.data_class().select()[0].data['0_display'] == 'Xattr%sY' % baz_id
6234 6235

  
6236
    resp = app.get(formdef.data_class().select()[0].get_url())
6237
    assert resp.pyquery('.field-type-item .value').text() == 'Xattr%sY' % baz_id
6238
    assert resp.pyquery('.field-type-item .value a').length == 0  # no link to card
6239

  
6240
    # change digests
6241
    carddef.digest_templates['custom-view:%s' % custom_view.slug] = 'Y{{form_var_attr}}Z'
6242
    carddef.store()
6243
    for carddata in carddef.data_class().select():
6244
        carddata.store()
6245

  
6246
    resp = app.get(formdef.data_class().select()[0].get_url())
6247
    assert resp.pyquery('.field-type-item .value').text() == 'Yattr%sZ' % baz_id
6248

  
6249
    # remove card (back to value stored at first)
6250
    carddef.data_class().wipe()
6251
    resp = app.get(formdef.data_class().select()[0].get_url())
6252
    assert resp.pyquery('.field-type-item .value').text() == 'Xattr%sY' % baz_id
6253

  
6235 6254

  
6236 6255
def test_item_field_from_custom_view_on_cards_filter_status(pub):
6237 6256
    pub.role_class.wipe()
wcs/fields.py
2313 2313
        if value and data_source is None:
2314 2314
            return get_publisher().translate(value) or ''
2315 2315
        value = super().get_view_value(value)
2316
        if not (
2317
            value_id
2318
            and get_request()
2319
            and get_request().is_in_backoffice()
2320
            and self.data_source
2321
            and self.data_source.get('type', '').startswith('carddef:')
2322
        ):
2316
        if not (value_id and self.data_source and self.data_source.get('type', '').startswith('carddef:')):
2323 2317
            return value
2324 2318
        carddef = self.get_carddef()
2325 2319
        if not carddef:
......
2328 2322
            carddata = carddef.data_class().get(value_id)
2329 2323
        except KeyError:
2330 2324
            return value
2331
        if not carddef.is_user_allowed_read(get_request().user, carddata):
2325
        parts = data_source.data_source['type'].split(':')
2326
        value = (carddata.digests or {}).get('default') or value
2327
        if len(parts) == 3:
2328
            digest_key = 'custom-view:%s' % parts[-1]
2329
            value = (carddata.digests or {}).get(digest_key) or value
2330
        if not (
2331
            get_request()
2332
            and get_request().is_in_backoffice()
2333
            and carddef.is_user_allowed_read(get_request().user, carddata)
2334
        ):
2332 2335
            return value
2333 2336
        return htmltext('<a href="%s">' % carddata.get_url(backoffice=True)) + htmltext('%s</a>') % value
2334 2337

  
2335
-