2009-07-17 7 views
1

Ich habe ein Grundmodell:Wie fügen Sie einer vorhandenen Klasse innerhalb einer interaktiven Sitzung (in iPython) eine Modellmethode hinzu?

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

ich eine ipython Sitzung mit Start-up:

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

Wie kann ich dieses Modell Methode innerhalb der ipython Sitzung?

>>> 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 

Ich mag diese Modell Methoden testen können, ohne das Verfahren auf die models.py Datei hinzufügen zu müssen und dann die Sitzung ipython Shell neu zu starten.

Ich scheine etwas falsch zu machen, denn wenn ich eine neue Modellmethode in einer interaktiven Sitzung hinzufüge, scheint sie nicht mit der Klasse verknüpft zu sein, wie wenn die Modellmethode in einer Datei definiert ist.

Also, wenn ich die Modellmethode wie oben erstellt und versucht, es zu verwenden. z.B. '>>> person = Person.objects.filter (last_name =' Franklin')
>>> person.is_midwestern
'Person' object has no attribute
‚is_midwestern'`

+0

Nicht klar, was Sie wollen. ipython emuliert die Python-Shell. Es kann also nicht anders sein als sonst. Erkläre besser. –

+1

In einer halbverwandten Notiz, ich denke, dass Sie einen guten Teil der Staaten des Mittleren Westens vermissen. – Adam

+0

Wenn ich eine neue Modellmethode in einer interaktiven Sitzung hinzufüge, scheint sie nicht mit der Klasse verknüpft zu sein, wie wenn die Modellmethode in einer Datei definiert ist. Also, wenn ich die Modellmethode wie oben erstellt und versucht, es zu verwenden. z.B. '>>> person = Person.objects.filter (last_name =' Franklin ') '>>> person.is_midwestern ' Person 'Objekt hat keine Eigenschaft' is_midwestern ' – BryanWheelock

Antwort

6

, warum Sie können nicht einfach tun dies Person.is_midwestern = is_miswestern z.B.

>>> 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

Das ist, was ich gesucht habe. Danke :-) – BryanWheelock

+0

gut :) so können Sie es als Antwort auswählen –

Verwandte Themen