2010-03-01 6 views
27

Je suis tenté d'étendre le code, et j'ai rencontré un problème, je ne comprends pas une ligne de code. Je connais le résultat, mais je ne comprends pas comment cela se passe et j'ai naturellement assez peur de le changer.Explication de contrib_to_class

La ligne de code que je suis venu à travers est la suivante:

MyGenericRelation().contribute_to_class(model, 'field_name') 

Le résultat de ce code est un champ avec « field_name » est ajouté au « modèle » et de ce que je rassemblerai les objets à l'intérieur le champ est une liste de type X (partie de MyGenericRelation). Je me demande si quelqu'un peut expliquer comment cela fonctionne. Comme dans, pourquoi puis-je obtenir une liste d'objets X attachés à 'nom_zone' et si doit-il être des relations génériques avant contrib_to_class ou utiliser un type de modèle réel, dites 'Y' donnez-moi une liste de Y.

Pour être honnête, je suis plus intéressé par l'affect et la fonctionnalité de la méthode contrib_to_class.

+1

Pouvez-vous expliquer ce que vous essayez de faire et pourquoi vous pensez que vous avez besoin de modifier ce code? Qu'est-ce que vous n'êtes pas capable de réaliser avec des relations génériques normales? –

Répondre

37

Fondamentalement, pour les objets qui ont une méthode contribute_to_class, en les ajoutant à une classe de modèle, nous appelons contribute_to_class au lieu de setattr: cela permet des objets à faire la comptabilité supplémentaire et/ou la modification de la classe comme ils sont ajoutés. Alex Gaynor a une bonne explication ici: http://lazypython.blogspot.com/2008/11/django-models-digging-little-deeper.html