1 votes

Gestionnaires personnalisés et "à travers"

J'ai une relation many-to-many dans mon application django où j'utilise la méthode "add" du manager assez fortement (ie album.photos.add() ).

J'ai maintenant besoin de stocker des données sur la relation plusieurs à plusieurs, mais je ne veux pas perdre la méthode d'ajout. Puis-je simplement définir une valeur par défaut pour tous les champs supplémentaires sur le modèle "through" et réimplémenter d'une manière ou d'une autre la méthode add ?

Je ne m'y connais pas vraiment en gestionnaires personnalisés, mais je pense que c'est peut-être là qu'il faut chercher.

mettre à jour :

Je me suis renseigné sur gestionnaires personnalisés ... peut-être puis-je empêcher l'ajout/la suppression/etc d'être désactivé lorsque j'ajoute l'argument "through" à mon champ Many-to-many ?

Quelqu'un sait-il comment faire ?

2voto

Carl Meyer Points 30736

La solution la plus simple consiste à ajouter une méthode à l'album (par exemple album.add_photo()) qui traite les métadonnées et crée manuellement une instance de photo correctement liée.

Si vous voulez vous amuser, vous pouvez écrire un gestionnaire personnalisé pour Photos, en faire le gestionnaire par défaut (c'est-à-dire le premier gestionnaire assigné), définir l'option use_for_related_fields = True et lui donner une méthode add() capable de définir correctement les métadonnées par défaut de la relation.

Au lieu de supprimer la méthode add() lorsqu'il y a une table de passage, il suffit de faire en sorte que add() accepte des kwargs arbitraires et les traite comme des données pour la table de passage.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X