2009-07-17 19 views
1

私は基本的なモデルがあります:インタラクティブセッション内の既存のクラス(iPython)にモデルメソッドを追加するにはどうすればよいですか?

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

私はiPythonセッションを起動する:私はiPythonセッション内でこのモデルのメソッドを追加するにはどうすればよい

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

を?

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

私はmodels.pyファイルにメソッドを追加することと、その後iPythonシェルセッションを再起動することなく、これらのモデルのメソッドをテストすることができるようにしたいです。

私は、対話型セッションで新しいモデルメソッドを追加すると、モデルメソッドがファイルで定義されているときと同じように、クラスにリンクされていないように見えるので、何か間違っているようです。

私は上記のようにモデルメソッドを作成し、それを使用しようとした場合。例:

+0

あなたは何を望んでいますか? ipythonはpythonシェルをエミュレートします。だからそれは別のものと違うことはできません。もっと説明してください。 –

+1

半関連性のないメモでは、中西部州の良い塊がないと思います。 – Adam

+0

新しいモデルメソッドをインタラクティブセッションに追加すると、モデルメソッドがファイルで定義されているときと同じように、クラスにリンクされていないように見えます。 上記のようにモデルメソッドを作成し、それを使用しようとするとします。例: '>>> person = Person.objects.filter(last_name =' Franklin ') '>>> person.is_midwestern ' Personオブジェクトには属性がありません 'is_midwestern' – BryanWheelock

答えて

6

は、なぜあなたはちょうどこれを行うことはできません Person.is_midwestern = is_miswestern例えばis_midwestern'` '>>>人= Person.objects.filter(LAST_NAME =' フランクリン)
>>> person.is_midwestern
'Person' object has no attribute

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

これは私が探していたものです。ありがとう:-) – BryanWheelock

+0

良い:)あなたは答えとしてそれを選択することができます –

関連する問題