Add the construct_change_message description

This commit is contained in:
Fred Pauchet 2022-06-02 22:23:42 +02:00
parent e8547083c5
commit 16f522d5ea
1 changed files with 54 additions and 0 deletions

View File

@ -48,6 +48,60 @@ Ils agissent come une glue entre l'utilisateur et la modélisation de vos struct
Tout comme pour le modèle (+ ref), l'idée est simplement de définir plusieurs niveaux de validation.
\section{Gestion du changement}
Dans le package \texttt{django.contrib.admin.utils}, on trouve une petite pépite du nom de \texttt{construct\_change\_message}.
Cette fonction permet de construire un message de changement à partir de n'importe que \texttt{form} ou \texttt{formset}.
Elle prend en paramètre une valeur booléenne supplémentaire qui indique s'il s'agit d'un ajout ou pas.
Le résultat retourne une structure qui indique les champs qui ont été modifiés, les champs qui ont été ajoutés ou supprimés:
\begin{minted}{python}
def construct_change_message(form, formsets, add):
[snip]
change_message = []
if add:
change_message.append({"added": {}})
elif form.changed_data:
change_message.append({"changed": {"fields": changed_field_labels}})
if formsets:
with translation_override(None):
for formset in formsets:
for added_object in formset.new_objects:
change_message.append(
{
"added": {
"name": str(added_object._meta.verbose_name),
"object": str(added_object),
}
}
)
for changed_object, changed_fields in formset.changed_objects:
change_message.append(
{
"changed": {
"name": str(changed_object._meta.verbose_name),
"object": str(changed_object),
"fields": _get_changed_field_labels_from_form(
formset.forms[0], changed_fields
),
}
}
)
for deleted_object in formset.deleted_objects:
change_message.append(
{
"deleted": {
"name": str(deleted_object._meta.verbose_name),
"object": str(deleted_object),
}
}
)
return change_message
\end{minted}
\section{Dépendance avec le modèle}
Un \textbf{form} peut hériter d'une autre classe Django.