Bloc sociétés
#1
Bonjour,

Je travaille sur le module "Beaver" et j'essaye d’intégrer un bloc sociétés.
j'ai essayé de le faire dans menu --> Blocs -->modification BEAVER, mais je ne trouve le champ "Cible et source" dont j'ai besoin.
Du coup, je regarde le modulle "billing". La structure me semble différente du module Beaver.
J'ai vu que dans le répertoire views --> base.py, il y a la classe "class RelatedBaseCreation(generic.AddingInstanceToEntityPopup):" ligne 42.

j'essaye d'adapter le code avec l'ajout de la classe RelatedBeaverCreation dans views/beaver.py

Code :
class RelatedBeaverCreation(generic.AddingInstanceToEntityPopup):
   model = Beaver
   # permissions: Union[str, Sequence[str], None] = 'billing'
   permissions: Union[str, Sequence[str]] = 'beaver'  # Need creation perm too
   initial_status = 1
   entity_id_url_kwarg = 'target_id'
   entity_classes = [
       persons.get_organisation_model(),
       persons.get_contact_model(),
   ]
   entity_form_kwarg = None

   def get_initial(self):
       initial = super().get_initial()
       initial['status'] = self.initial_status

       target = self.get_related_entity()
       # initial['target'] = target  # DEPRECATED
       initial[
           base_forms.BeaverTargetSubCell(model=self.model).into_cell().key
       ] = target

       return initial

   def get_success_url(self):
       if bool_from_str_extended(self.request.GET.get('redirection', '0')):
           return self.object.get_absolute_url()

       return super().get_success_url()
de même pour customs_forms.py, apps.py, populate.py, models/beaver.py, forms/beaver.py.
Je me suis inspiré du didacticiel beaver §Formulaires personnalisés (CustomForms)

lors d'une cmd runserver, j'accède a ma liste de beaver mais quand je clique sur "create a beaver", j'ai une erreur "DoesNotExist at /beavers/beaver/add"
la vue création passe par custom_forms.BEAVER_CREATION_CFORM  avec la traceback ci dessous.
Code :
class BeaverCreation(generic.EntityCreation):
   model = Beaver
   #form_class = BeaverForm
   form_class = custom_forms.BEAVER_CREATION_CFORM  # <== NEW


Code :
Environment:


Request Method: GET
Request URL: http://127.0.0.1:8000/beavers/beaver/add

Django Version: 3.2.7
Python Version: 3.9.5
Installed Applications:
['creme.creme_core.apps.ContentTypesConfig',
'django.contrib.auth',
'django.contrib.sessions',
'formtools',
'creme.creme_core.apps.MediaGeneratorConfig',
'creme.creme_core',
'creme.creme_config',
'creme.documents',
'creme.persons',
'creme.activities',
'creme.assistants',
'creme.graphs',
'creme.reports',
'creme.products',
'creme.recurrents',
'creme.billing',
'creme.opportunities',
'creme.commercial',
'creme.events',
'creme.crudity',
'creme.emails',
'creme.projects',
'creme.tickets',
'creme.vcfs',
'creme.geolocation',
'creme.audits',
'creme.beavers']
Installed Middleware:
['creme.creme_core.middleware.exceptions.Ajax500Middleware',
'creme.creme_core.middleware.exceptions.Ajax404Middleware',
'creme.creme_core.middleware.exceptions.Ajax403Middleware',
'creme.creme_core.middleware.exceptions.Beautiful409Middleware',
'creme.creme_core.middleware.exceptions.BadRequestMiddleware',
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'creme.creme_core.middleware.locale.LocaleMiddleware',
'creme.creme_core.middleware.global_info.GlobalInfoMiddleware',
'creme.creme_core.middleware.timezone.TimezoneMiddleware']



Traceback (most recent call last):
 File "C:\Users\OMEN\creme_crm\venv\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
   response = get_response(request)
 File "C:\Users\OMEN\creme_crm\venv\lib\site-packages\django\core\handlers\base.py", line 181, in _get_response
   response = wrapped_callback(request, *callback_args, **callback_kwargs)
 File "C:\Users\OMEN\creme_crm\venv\lib\site-packages\django\views\generic\base.py", line 70, in view
   return self.dispatch(request, *args, **kwargs)
 File "c:\users\omen\creme_crm\creme\creme_core\views\generic\add.py", line 77, in dispatch
   return super().dispatch(request, *args, **kwargs)
 File "C:\Users\OMEN\creme_crm\venv\lib\site-packages\django\views\generic\base.py", line 98, in dispatch
   return handler(request, *args, **kwargs)
 File "C:\Users\OMEN\creme_crm\venv\lib\site-packages\django\views\generic\edit.py", line 168, in get
   return super().get(request, *args, **kwargs)
 File "C:\Users\OMEN\creme_crm\venv\lib\site-packages\django\views\generic\edit.py", line 133, in get
   return self.render_to_response(self.get_context_data())
 File "c:\users\omen\creme_crm\creme\creme_core\views\generic\add.py", line 80, in get_context_data
   context = super().get_context_data(**kwargs)
 File "C:\Users\OMEN\creme_crm\venv\lib\site-packages\django\views\generic\edit.py", line 66, in get_context_data
   kwargs['form'] = self.get_form()
 File "C:\Users\OMEN\creme_crm\venv\lib\site-packages\django\views\generic\edit.py", line 32, in get_form
   form_class = self.get_form_class()
 File "c:\users\omen\creme_crm\creme\creme_core\views\generic\add.py", line 88, in get_form_class
   return self.get_custom_form_class(super().get_form_class())
 File "c:\users\omen\creme_crm\creme\creme_core\views\generic\base.py", line 305, in get_custom_form_class
   return form_class.build_form_class()
 File "c:\users\omen\creme_crm\creme\creme_core\gui\custom_form.py", line 960, in build_form_class
   return self.groups(item).form_class(
 File "c:\users\omen\creme_crm\creme\creme_core\gui\custom_form.py", line 937, in groups
   item = item or item_model.objects.get(cform_id=self.id)
 File "C:\Users\OMEN\creme_crm\venv\lib\site-packages\django\db\models\manager.py", line 85, in manager_method
   return getattr(self.get_queryset(), name)(*args, **kwargs)
 File "C:\Users\OMEN\creme_crm\venv\lib\site-packages\django\db\models\query.py", line 435, in get
   raise self.model.DoesNotExist(

Exception Type: DoesNotExist at /beavers/beaver/add
Exception Value: CustomFormConfigItem matching query does not exist.

Si je passe par BeaverForm pour la classe BeaverCration, je n'ai pas d'erreur mais je n'est pas le bloc sociétés.

En premier, est ce que il est possible d'avoir ce bloc sociétés sans toucher au code ?
Si non, est ce la bonne démarche ? est ce que j'ai oublié quelque chose (j'ai fait la cmd creme_populate, makemigartions beavers et migrate, mais il n'y a aucun changement) ?

en complément mon custom_forms.py
Code :
BEAVER_CREATION_CFORM = CustomFormDescriptor(
   id='beavers-beaver_creation',
   model=Beaver,
   verbose_name=_('Creation form for beaver'),
    base_form_class=beaver.BeaverCustomForm,
    extra_sub_cells=[
        beaver.BeaverSourceSubCell(model=Beaver),
        beaver.BeaverTargetSubCell(model=Beaver),
    ],
)


merci de votre retour

Cordialement
Tiago
  Répondre


Messages dans ce sujet
Bloc sociétés - par tiago.goncalves - 06-10-2021, 23:21
RE: Bloc sociétés - par genglert - 08-10-2021, 10:18
RE: Bloc sociétés - par tiago.goncalves - 08-10-2021, 18:19

Atteindre :


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