AttributeError: '_LinksGroup' object has no attribute 'add'
#1
Bonjour,

Je continue ma progression tout doucement sur la doc exemple Smile .

Dans mon apps.py
Code :
# -*- coding: utf-8 -*-

from creme.creme_core.apps import CremeAppConfig
from django.utils.translation import gettext_lazy as _


class EditorsConfig(CremeAppConfig):
   name = 'creme.editors'
   verbose_name = _('Editors management')
   dependencies = ['creme.creme_core']
   def register_entity_models(self, creme_registry):
       from .models import Editor
       creme_registry.register_entity_models(Editor)

   def register_menu(self, creme_menu):
       from .models import Editor
       creme_menu.get('features', 'persons-directory')\
           .add(creme_menu.URLItem.list_view('editors-editors', model=Editor))
       creme_menu.get('creation', 'any_forms')\
           .get_or_create_group('persons-directory', _('Directory'), priority=10)\
           .add("create_editor", Editor)  # <- vous pouvez utiliser un paramètre 'priority'

J'ai un message d'erreur :
Code :
 File "v:\Python\creme2\creme\editors\apps.py", line 20, in register_menu
   .get_or_create_group('persons-directory', _('Directory'), priority=10)\
AttributeError: '_LinksGroup' object has no attribute 'add'

La classe _LinksGroup se trouve dans le fichier : \Python\creme2\creme\creme_core\gui\menu.py si je ne m'abuse.

Je ne comprends pas aussi 'persons-directory' et 'feautures' à quoi cela correspond.
  Répondre
#2
Bon je me répond à moi-même

Il faut remplacer :

.add("create_editor", Editor)

par

.add_link("create_editor", Editor)
  Répondre
#3
Oui en effet dans le tutoriel ".add('create_beaver', Beaver)" est erroné, et "add_link()" doit être utilisé à la place. Merci pour le retour, je corrigerai ça.



Citation :Je ne comprends pas aussi 'persons-directory' et 'feautures' à quoi cela correspond.



L'API du menu est un peu complexe, mais cela permet d'avoir un menu construit collaborativement par les différentes apps, de pouvoir modifier le menu depuis une app etc....

Si vous regardez le fichier 'creme/creme_core/apps.py', dans la méthode 'CremeCoreConfig.register_menu()', vous verrez que le core créé 3 groupes principaux:
- 'creme': qui correspond à l'entrée 'Creme' au début du menu.
- 'features': qui correspond à toutes les entrées ajoutées par les apps (principalement les liens vers les vues en listes).
- 'creation'. qui correspond à l'entrée '+Création'

Et dans le fichier 'creme/persons/apps.py', dans la méthode 'PersonsConfig.register_menu()' vous trouvez ce code :
Code :
       directory = creme_menu.get(
           'features',
       ).get_or_create(
           creme_menu.ContainerItem, 'persons-directory', priority=20,
           defaults={'label': _('Directory')},
       ).add(
           URLItem.list_view('persons-organisations', model=Organisation),
           priority=10
       ).add(...)

Il récupère le groupe avec l'ID 'feature' (le groupe principal docn), y créé une entrée/groupe 'persons-directory' ("Annuaire"), puis y ajoute les vues de listes des Sociétés et Contacts.

Le code < creme_menu.get('features', 'persons-directory') > permet donc de récupérer directement le sous-groupe "Annuaire" (on donne la liste des ID -- l'équivalent du chemin d'un fichier par analogie).
  Répondre


Atteindre :


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