Erreur 404 lors de la création d'une relation
#1
Bonjour,

Sur une instance 2.4.12, lorsque je tente de créer une nouvelle relation depuis la vue "société", au moment de sélectionner la cible de la relation, j'obtiens une popup 404.

L'URL de la requête qui retourne 404 est : 
/creme_core/list_view/popup?ct_id=null&selection=multiple&q_filter=&selection=multiple

Dans les logs je trouve la trace suivante :
Code :
[2024-02-19 15:03:57] ERROR - creme.creme_core.middleware.exceptions : Error (status=404)
Traceback (most recent call last):
  File "/srv/creme/venv/lib/python3.8/site-packages/creme/creme_core/views/generic/base.py", line 309, in get_ctype
    ctype = getattr(self, 'related_ctype')
AttributeError: 'EntitiesListPopup' object has no attribute 'related_ctype'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/srv/creme/venv/lib/python3.8/site-packages/creme/creme_core/views/generic/base.py", line 314, in get_ctype
    ct_id = int(ct_id_str)
ValueError: invalid literal for int() with base 10: 'null'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/srv/creme/venv/lib/python3.8/site-packages/django/core/handlers/base.py", line 181, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/srv/creme/venv/lib/python3.8/site-packages/django/views/generic/base.py", line 70, in view
    return self.dispatch(request, *args, **kwargs)
  File "/srv/creme/venv/lib/python3.8/site-packages/creme/creme_core/views/generic/listview.py", line 225, in dispatch
    self.check_view_permissions(user=user)
  File "/srv/creme/venv/lib/python3.8/site-packages/creme/creme_core/views/generic/listview.py", line 216, in check_view_permissions
    model = self.model
  File "/srv/creme/venv/lib/python3.8/site-packages/creme/creme_core/views/entity.py", line 1370, in model
    return self.get_ctype().model_class()
  File "/srv/creme/venv/lib/python3.8/site-packages/creme/creme_core/views/generic/base.py", line 316, in get_ctype
    raise Http404('ContentType ID must be an integer.')
django.http.response.Http404: ContentType ID must be an integer.
[2024-02-19 15:03:57] WARNING - django.request : Not Found: /creme_core/list_view/popup

J'imagine que la source du problème vient du paramètre ct_id=null dans la requête, mais je ne sais pas trop comment investiguer la cause qui amène à ce que cette URL soit mal générée à la base. Une idée ?

Merci d'avance
  Répondre
#2
Bonsoir,

j'ai essayé de reproduire en créant une relation depuis le bloc des relations (celui avec tous les types de relation) et je n'ai pas rencontré de souci (je dis que je veut relier à un Contact et dans l'URL générée le ct_id correspond bien à liD des Contacts dans la table 'django_content_type).

J'ai essayé aussi de puis le bloc des salariés, ainsi que depuis le bloc de relation "est client de", et pas de bug non plus.

Avez vous utilisé un de ces blocs, ou bien un autre bloc/bouton, pour créer votre relation ?
  Répondre
#3
Le problème n'est effectivement présent que lors de l'utilisation du bloc des relations génériques.
Les autres blocs "Créer un salarié" ou "Créer un responsable" n'ont pas le problème.
Je soupçonne que quelque chose est cassé côté BDD, soit suite à une mauvaise manip soit suite aux mises à jour successives (cette instance a été créé en 2.4.2 il me semble), mais je ne sais pas trop ou chercher...
  Répondre
#4
Normalement les mises à jour mineures (2.4.*) ne touchent pas à la base de données (c'est le but, elles doivent juste corriger le nécessaire pour être le plus sûre possible).

Avant de commencer à chercher plus loin, avez-vous bien pensé à re-générer les media après avoir mis à jour ?
  Répondre
#5
Oui j'ai ajouté l'execution de la commande "creme generatemedia" dans le script entrypoint.sh de mon container lorsque j'investiguais le précédent pb.

Voici le résultat visible dans les logs :
Code :
+ creme generatemedia
Populate "graphs" ... OK
Populate "reports" ... OK
Populate "products" ... OK
Populate "recurrents" ... OK
Populate "billing" ... OK
Populate "opportunities" ... OK
Populate "commercial" ... OK
Populate "events" ... OK
Populate "crudity" ... OK
Populate "emails" ... OK
Populate "projects" ... OK
Populate "tickets" ... OK
Populate "vcfs" ... OK
Populate "geolocation" ... OK
No sequence to update.
Populate is OK.
/srv/creme/venv/lib/python3.8/site-packages/formtools/__init__.py:2: DeprecationWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html
  from pkg_resources import DistributionNotFound, get_distribution
Generating l10n.js with variation {'language': 'en'}
Generating l10n.js with variation {'language': 'fr'}
Generating lib.js with variation {}
Generating main.js with variation {}
Generating icecreammain.css with variation {}
Generating chantillymain.css with variation {}
  Répondre
#6
Ok, si ça n'a pas réglé votre problème, il va falloir investiguer. Je ne sais pas quelles sont vos compétences en HTML/JavaScript (ça risque d'être nécessaire pour diagnostiquer), mais si vous inspectez dans votre browser le gros widget qui permet de créer des relations, il doit commencer un peu comme ça:

Code :
<div id="id_relations" class="ui-creme-widget widget-auto ui-creme-selectorlist widget-active widget-ready" widget="ui-creme-selectorlist" clonelast="" data-select2-id="id_relations">
    <input type="hidden" name="relations" value="[{'rtype': 'persons-object_competitor','ctype': '68','entity':null}]" class="ui-creme-input ui-creme-selectorlist">

La valeur de l'input est ce qui nous intéresse. Ici, on voit bien que le "rtype" est l'ID du type de relation qui est sélectionné, "ctype" l'ID du type d'entité ('68' correspond à Contact chez moi, dans la table "django_content_type" en base de donnée), et je n'ai pas encore choisi l'entité qui vaut encore 'null'.

Voyez vous quelque chose qui cloche à ce niveau (en changeant le type de relation ou le type de fiche à sélectionner) ? (et si oui est-ce vrai avec plusieurs navigateurs -- Firefox, Chrome... -- différents?)
  Répondre
#7
Ok, je n'avais pas pensé à tester plusieurs browser et effectivement, je vois que sous Firefox je n'ai pas de pb alors que sous Chrome j'ai bien l'erreur.

Dans la console Chrome j'obtiens le code suivant :
Code :
<input type="hidden" name="relations" value="[{&quot;rtype&quot;:&quot;email-object_mail_sended&quot;,&quot;ctype&quot;:null,&quot;entity&quot;:null}]" class="ui-creme-input ui-creme-selectorlist">

Dans la console Firefox j'obtiens le code suivant :

Code :
<input type="hidden" name="relations" value="[{&quot;rtype&quot;:&quot;email-object_mail_sended&quot;,&quot;ctype&quot;:&quot;139&quot;,&quot;entity&quot;:null}]" class="ui-creme-input ui-creme-selectorlist">

Au passage j'ai remarqué que j'avais une erreur supplémentaire sous Chrome (lorsque je clique sur le bouton "Nouvelles relations") qui est peut-être à l'origine du problème :
Code :
[Violation] Permissions policy violation: Synchronous requests are disabled by permissions policy.

Alors que sous Firefox je n'ai qu'un warning indiquant que c'est "obsolète" :
Code :
L’utilisation d’XMLHttpRequest de façon synchrone sur le fil d’exécution principal est obsolète à cause de son impact négatif sur la navigation de l’utilisateur final. Consulter https://xhr.spec.whatwg.org/#sync-warning pour plus d’informations.
  Répondre
#8
Ok je regarderai si j'arrive à reproduire (je pense avoir testé avec Firefox, mais avec les mises à jour fréquentes des browsers c'est des choses qui peuvent arriver). Au moins il y a une façon de contourner le problème dans un premier temps.

Bonne soirée !
  Répondre


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)