Development #51207
refacto, field.set_value()
0%
Description
On a plusieurs endroits qui modifient la valeur d'un champ, et c'est chaque fois genre 15 lignes qui sont copiées/collées/modifiées,
formdata.data['%s' % field['field_id']] = new_value if formdef_field.store_display_value: display_value = formdef_field.store_display_value(formdata.data, formdef_field.id) if display_value: formdata.data['%s_display' % formdef_field.id] = display_value elif '%s_display' % formdef_field.id in formdata.data: del formdata.data['%s_display' % formdef_field.id] if formdef_field.store_structured_value and formdata.data.get(formdef_field.id): structured_value = formdef_field.store_structured_value(formdata.data, formdef_field.id) if structured_value: if isinstance(structured_value, dict) and structured_value.get('id'): # in case of list field, override id formdata.data['%s' % formdef_field.id] = str(structured_value.get('id')) formdata.data['%s_structured' % formdef_field.id] = structured_value elif '%s_structured' % formdef_field.id in formdata.data: del formdata.data['%s_structured' % formdef_field.id]
Fichiers
Révisions associées
Historique
Mis à jour par Frédéric Péters il y a environ 3 ans
- Fichier 0001-general-factor-field-value-assignment-into-a-set_val.patch 0001-general-factor-field-value-assignment-into-a-set_val.patch ajouté
- Statut changé de Nouveau à Solution proposée
- Patch proposed changé de Non à Oui
Proposition de factoriser ça au niveau du champ.
Il y a aussi idée derrière de repasser sur les convert_value_from_{anything,str} et clarifier tout ça mais cette première étape est toute propre. (et peut corriger des bugs, genre l'anonymisation qui ne vidait pas la partie _structured).
Mis à jour par Thomas Noël il y a environ 3 ans
- Statut changé de Solution proposée à Solution validée
Dans wcs/backoffice/data_management.py, sur le import_csv_submit tu peux même supprimer la ligne « field_id = str(field.id) » qui ne sert plus.
Dans le même fichier selon moi tu n'étais pas obligé de toucher à UserField (suppression de store_display_value / store_structured_value et redéfinition d'un set_value à la place). Mais comme set_value ne va surement pas changer de sens, je comprends l'idée et je acke ainsi.
Mis à jour par Frédéric Péters il y a environ 3 ans
tu n'étais pas obligé de toucher à UserField
Si,
[2021-02-17 09:29:32] exception caught Exception: type = '<class 'AttributeError'>', value = ''UserField' object has no attribute 'set_value'' Stack trace (most recent call first): File "/home/fred/src/eo/wcs/wcs/backoffice/data_management.py", line 275, in import_csv_submit 273 if field.convert_value_from_str is None: 274 continue > 275 field_id = str(field.id) 276 field.set_value(data_line, field.convert_value_from_str(value)) 277 data_lines.append(data_line)
(et du coup en étant là j'ai supprimé les store_etc. inutiles).
Mis à jour par Thomas Noël il y a environ 3 ans
Frédéric Péters a écrit :
tu n'étais pas obligé de toucher à UserField
Si,
Bête que je suis, évidemment.
Mis à jour par Frédéric Péters il y a environ 3 ans
- Statut changé de Solution validée à Résolu (à déployer)
commit 3afa84408626e6125544c08b4e4ee28ba673bc68 Author: Frédéric Péters <fpeters@entrouvert.com> Date: Wed Feb 17 08:53:23 2021 +0100 general: factor field value assignment into a set_value method (#51207)
Mis à jour par Frédéric Péters il y a environ 3 ans
- Statut changé de Résolu (à déployer) à Solution déployée
general: factor field value assignment into a set_value method (#51207)