06-10-2021, 23:21
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
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.
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
merci de votre retour
Cordialement
Tiago
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()
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