2
votes

Django - Différence entre le signal admin save_model () et post_save

Pour mon application, je dois effectuer des opérations supplémentaires lorsqu'un modèle est enregistré via un formulaire. En pratique, je dois ajouter une valeur dans un autre modèle si certaines conditions sont présentes dans le formulaire.

Pour ce faire, j'ai deux options, mais je veux comprendre les avantages et les inconvénients des deux.

  1. Utilisez le signal post_save
  2. Remplacez la méthode save_model dans admin.py, car elle est indiquée dans le documentation que" Le remplacement de cette méthode permet d'effectuer des opérations avant ou après l'enregistrement. "

J'utilise actuellement ce dernier de cette manière

def save_model(self, request, obj, form, change):

    #some pre save operations....

    #this call the save model method
    super(MyModelAdmin, self).save_model(request, obj, form, change)

    #some post save operations...

et cela fonctionne

Mais ce que je veux comprendre, c'est: p>

  1. Pour ce que je dois faire, quelles sont les différences entre les deux approches et quelle est la plus correcte.
  2. La méthode save_model est-elle liée à l'utilisation de l'interface d'administration? Que se passe-t-il si j'utilise un autre frontend différent de l'administrateur de Django?
  3. En général, quelle est la différence entre effectuer des opérations pré et post-enregistrement en écrasant save_model et en utilisant des signaux?


1 commentaires

De la façon dont je le vois, un objet modèle peut être enregistré à partir de n'importe où dans votre application, pas seulement de l'administrateur django. La seule façon de s'assurer que quelque chose se passe à chaque fois qu'un objet est enregistré est d'utiliser des signaux pré / post_save ou de remplacer la méthode .save (). Après cela, tout ce que vous avez à faire est de faire attention aux mises à jour en masse.


3 Réponses :


0
votes

Si possible, je préférerais ajouter des signaux en écrasant le save_model. Les signaux permettent à certains expéditeurs de notifier un ensemble de destinataires qu'une action a eu lieu. Ils sont particulièrement utiles lorsque de nombreux morceaux de code peuvent être intéressés par les mêmes événements. Cela ressemble également au paradigme de la programmation événementielle . Cela aide à organiser et nettoyer le code.


0 commentaires

2
votes

Je pense que vous avez raison. Et cela pourrait vous aider à comprendre la différence.

Méthode save_model de ModelAdmin appelée lorsque vous essayez de créer ou de mettre à jour quelque chose depuis django admin uniquement mais les signaux sont déclenchés quoi qu'il en soit du lieu où les actions se sont produites. Ce qui signifie que les opérations pre ou post dans la méthode save_model ne fonctionneront pas si vous changez de modèle en dehors de django admin mais les signaux fonctionneront à la fois en dehors des vues d'administration et à partir de vos blocs de code écrits personnalisés.


0 commentaires

0
votes

Prenons un exemple assez régulier du processus. Nous voulons enregistrer un nouvel utilisateur et nous avons également créé un modèle de profil que nous voulons que le profil d'un utilisateur soit enregistré uniquement lorsque des informations utilisateur valides sont enregistrées.

Nous pouvons créer un nouvel utilisateur dans l'admin de Django et utiliser la méthode saved_model dans ModelAdmin pour enregistrer d'autres parties du formulaire dans le Profile modèle. C'est la manière «normale» de procéder. Mais en utilisant cette méthode, vous ne pouvez accéder à l'utilisateur et au profil qu'à partir du panneau d'administration de Django. Un formulaire «d'enregistrement d'utilisateur» en dehors de l'administrateur Django ne fonctionnerait pas car l'utilisateur devrait être enregistré pour accéder aux contrôles d'administration de Django.

Mais en utilisant le signal post_save , un nouvel utilisateur et un nouveau profil peuvent être créés et mis à jour que vous utilisiez le panneau d'administration Django ou un formulaire personnalisé qui s'enregistre dans User et Modèles de Profil .

L'utilisation des signaux est donc la plus flexible mais vous devrez maintenant vous assurer d'avoir un moyen de valider les informations provenant du formulaire personnalisé.


0 commentaires