User custom fields via une autre app

Pour ne pas interférer avec oryxr , je créé un autre fil que Récupération des custom_field.
Sur la docker stack de dev (frappe_docker)
Après la lecture du fil précédent, j’ai lu et écrit mon install.py et modifier hooks.py:

after_install = "myapp.install.after_install"
after_migrate = "myapp.install.after_migrate"

et

import click
import frappe
from frappe import _
from frappe.custom.doctype.custom_field.custom_field import create_custom_fields

def after_install():
	add_custom_fields()

def after_migrate():
	add_custom_fields()
	# add_property_setters()


def add_custom_fields():
	click.secho("* Adding User custom fields")
	custom_fields = get_custom_fields()
	create_custom_fields(custom_fields)

def get_custom_fields():
    return {
        "User": [
            {
                "fieldname": "level",
                "fieldtype": "Int",
                "label": "User's Level",
                "insert_after": "enabled"
            }
        ]
    }

MODULE = "frappe"
PROPERTY_SETTERS = [
    # {
    #   "name": "DOCTYPE-FIELD-PROPERTY",
    #   "doc_type": "DOCTYPE",
    #   "doctype_or_field": "DocField",
    #   "field_name": "FIELD",
    #   "property": "PROPERTY",
    #   "value": "VALUE",
    # },
]

for ps in PROPERTY_SETTERS:
        assert ps["name"], "Property Setter name is required"
        frappe.delete_doc_if_exists("Property Setter", ps["name"])

        doc = frappe.new_doc("Property Setter")  # type: ignore
        doc.is_system_generated = True
        doc.module = MODULE
        doc.update(ps)
        doc.insert()

puis je bench --site eco.localhost migrate et enfin bench start, ça se passe bien :

Syncing portal menu...
Updating installed applications...
Executing `after_migrate` hooks...
* Adding User custom fields
Queued rebuilding of search index for eco.localhost

et le champ level est bien créé dans la table tabUser,

mais il n’apparait pas dans les champs sur le desk:

Hmmm, je n’ai sans doute pas compris l’histoire avec property_setters.

EDIT: Mah, oui, j’ai zero PS, donc la boucle for ps va être courte ! Bon alors, je dois faire quoi pour juste rajouter un pauvre champ ?

Re-bonjour @pmz,

Un champ personnalisĂ© n’apparaĂ®tra jamais dans la dĂ©finition du « DocType Â» car celle-ci correspond toujours Ă  la dĂ©finition des champs standards.

Par contre, tu as probablement crĂ©Ă© un document « Champ personnalisĂ© (Custom Field) Â» qui est, lui, visible en mode « Personnalisation Â».
Tu ne pourras pas le visualiser pour le doctype User, puisque les personnalisations sont censées être désactivée (cf. autre thread), mais tu peux au moins voir la définition de ton champ dans la liste des champs personnalisés. Ex. Dokos

Pour tout autre document - non core - tu peux ouvrir le mode de personnalisation en allant dans la vue en liste du doctype que tu veux personnaliser et en cliquant sur le menu > personnaliser:

En vue de personnalisation, tu verras les champs standards (provenant du document DocType) et toutes les personnalisations qui proviennent:

  • Des champs personnalisĂ©s: ajout et modification d’un champ non prĂ©vu dans le DocType
  • Des propriĂ©tĂ©s personnalisĂ©es: masquer un champ, le dĂ©placer, changer son libellĂ©, etc…

J’espère que ça clarifie un peu l’architecture.

Bonne journée

Mais oui !!
Merci @chdecultot !

J’avais peur que MODULE=frappe ou les PS aient fait tout passer à la trappe.