Bug #40645
duplicate key value sur réordonnancement des cellules
0%
Description
IntegrityError at /manage/pages/1/order duplicate key value violates unique constraint "data_validityinfo_content_type_id_object_id_dd12d6f0_uniq" DETAIL: Key (content_type_id, object_id)=(31, 36) already exists. Request Method: GET Request URL: https://..../manage/pages/1/order?pos_search_searchcell-1=0&ph_search_searchcell-1=sidebar&pos_wcs_trackingcodei nputcell-3=1&ph_wcs_trackingcodeinputcell-3=sidebar&pos_data_menucell-2=2&ph_data_menucell-2=sidebar&pos_data_textcell-1=3&ph_data_textcell-1=co ntent&pos_wcs_wcsformsofcategorycell-1=4&ph_wcs_wcsformsofcategorycell-1=content&pos_wcs_wcsformsofcategorycell-2=5&ph_wcs_wcsformsofcategorycel l-2=content&pos_wcs_wcsformsofcategorycell-6=6&ph_wcs_wcsformsofcategorycell-6=content&pos_wcs_wcsformsofcategorycell-3=7&ph_wcs_wcsformsofcateg orycell-3=content&pos_wcs_wcsformsofcategorycell-4=8&ph_wcs_wcsformsofcategorycell-4=content&pos_wcs_wcsformsofcategorycell-5=9&ph_wcs_wcsformso fcategorycell-5=content&pos_wcs_wcsformsofcategorycell-36=10&ph_wcs_wcsformsofcategorycell-36=content&pos_data_linkcell-14=11&ph_data_linkcell-1 4=content&pos_data_textcell-17=12&ph_data_textcell-17=footer ... File "/usr/lib/python3/dist-packages/combo/manager/views.py" in cell_order 544. cell.save() File "/usr/lib/python3/dist-packages/combo/apps/wcs/models.py" in save 214. validity_info.save() ...
Je ne sais trop comment arrive l'erreur mais je me dis que sur cette situation (réordonnancement) on peut juste zapper la vérification de validité.
Fichiers
Révisions associées
Historique
Mis à jour par Frédéric Péters il y a environ 4 ans
- Fichier 0001-manager-don-t-check-cell-validity-when-reordering-th.patch 0001-manager-don-t-check-cell-validity-when-reordering-th.patch ajouté
- Statut changé de Nouveau à Solution proposée
- Patch proposed changé de Non à Oui
Mis à jour par Emmanuel Cazenave il y a environ 4 ans
Je ne comprends en quoi passer update_fields
va zapper la vérification de validité.
Mis à jour par Frédéric Péters il y a environ 4 ans
def save(self, *args, **kwargs): if 'update_fields' in kwargs: # don't check validity return super(LinkCell, self).save(*args, **kwargs)
Mis à jour par Frédéric Péters il y a environ 4 ans
Que j'ai pris comme étant sur la classe CellBase, alors que ce n'est pas le cas...
Mis à jour par Frédéric Péters il y a environ 4 ans
Ce qui pourrait être le cas (avoir ce code sur CellBase) mais n'est pas nécessaire, et ça me va de ne pas changer ça maintenant.
Mis à jour par Frédéric Péters il y a environ 4 ans
c'est aussi présent dans le .save() de la trace:
def save(self, *args, **kwargs): if 'update_fields' in kwargs: # don't populate the cache return super(WcsCommonCategoryCell, self).save(*args, **kwargs)
Mis à jour par Emmanuel Cazenave il y a environ 4 ans
- Statut changé de Solution proposée à Solution validée
ecazenave : 40645 j'y comprends toujours rien avec les explications supplémentaires, je laisse à quelqu'un de mieux réveillé
fpeters: j'y ai mis ma dose de confusion parce qu'à un moment j'ai cru que j'avais mal visé, et que l'update_fields n'était pas pris en compte.
mais c'est au final très simple. s'il y a update_fields=... les méthodes .save() des cellules, qui autrement appelleraient la vérification de validité, ne le > font pas.
Le pattern qui zappe le check de validité si update_fields est là, je le trouve que sur LinkCell et WcsFormCell, d'où ta remarque "Ce qui pourrait être le cas (avoir ce code sur CellBase) mais n'est pas nécessaire, et ça me va de ne pas changer ça maintenant.", ok.
Mis à jour par Frédéric Péters il y a environ 4 ans
- Statut changé de Solution validée à Résolu (à déployer)
commit e458263be21adb3962b379ad2c106acc5f50764d Author: Frédéric Péters <fpeters@entrouvert.com> Date: Wed Mar 11 11:41:24 2020 +0100 manager: don't check cell validity when reordering them (#40645)
Mis à jour par Frédéric Péters il y a environ 4 ans
- Statut changé de Résolu (à déployer) à Solution déployée
manager: don't check cell validity when reordering them (#40645)