2009-07-17 9 views
1

J'ai un modèle de base:Comment ajouter une méthode de modèle à une classe existante dans une session interactive (dans iPython)?

class Person(models.Model): 
    first_name = models.CharField(max_length=50) 
    last_name = models.CharField(max_length=50) 
    state = USStateField() 

je démarre une session ipython avec:

$ python manage.py shell 
>>> from app.models import Person 

Comment puis-je ajouter cette méthode de modèle dans la session ipython?

>>> def is_midwestern(self): 
...  "Returns True if this person is from the Midwest." 
...  return self.state in ('IL', 'WI', 'MI', 'IN', 'OH', 'IA', 'MO') 

>>> person = Person.objects.filter(last_name='Franklin') 
>>> person.is_midwestern 
True 

Je veux être en mesure de tester ces méthodes de modèle sans avoir à ajouter la méthode au fichier models.py puis redémarrer la session shell ipython.

Je semble faire quelque chose de mal parce que lorsque j'ajoute une nouvelle méthode de modèle dans une session interactive, elle ne semble pas liée à la classe comme c'est le cas lorsque la méthode du modèle est définie dans un fichier. Donc, si j'ai créé la méthode du modèle comme ci-dessus et essayé de l'utiliser. par exemple. '>>> personne = Person.objects.filter (last_name =' Franklin')
>>> person.is_midwestern
'Person' object has no attribute
« is_midwestern'`

+0

Pas clair ce que vous voulez. ipython émule le shell python. Donc, il ne peut pas être différent de ce qu'il en est autrement. Explique mieux. –

+1

Sur une note semi-indépendante, je pense que vous manquez une bonne partie des États du Midwest. – Adam

+0

Lorsque j'ajoute une nouvelle méthode de modèle dans une session interactive, elle ne semble pas être liée à la classe comme elle le fait lorsque la méthode du modèle est définie dans un fichier. Donc, si j'ai créé la méthode du modèle comme ci-dessus et essayé de l'utiliser. par exemple. '>>> personne = Person.objects.filter (last_name =' Franklin ') '>>> personne.is_midwestern L'objet' Personne 'n'a pas d'attribut' is_midwestern ' – BryanWheelock

Répondre

6

pourquoi ne pouvez-vous faire juste ce Person.is_midwestern = is_miswestern par exemple

>>> class Person: 
...  def __init__(self): self.mid = True 
... 
>>> def is_midwestern(self): return self.mid 
... 
>>> Person.is_midwestern = is_midwestern 
>>> p = Person() 
>>> p.is_midwestern() 

True 
>>> 
+0

C'est ce que je cherchais. Merci :-) – BryanWheelock

+0

bon :) donc vous pouvez le sélectionner comme une réponse –