1

私は基本的なモデルを持っています:

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

次のコマンドでiPythonセッションを開始します。

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

このモデルメソッドを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

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

インタラクティブセッションで新しいモデルメソッドを追加すると、モデルメソッドがファイルで定義されている場合のように、クラスにリンクされていないように見えるため、何か問題が発生しているようです。

したがって、上記のようにモデルメソッドを作成して使用しようとした場合。例'>>>person = Person.objects.filter(last_name ='Franklin')' is_midwestern'`
>>> person.is_midwestern
'Person' object has no attribute

4

2 に答える 2

7

なぜあなたはこのPerson.is_midwestern=is_miswesternを実行できないのですか?

>>> 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
>>> 
于 2009-07-17T15:12:01.007 に答える
0

受け入れられた答えは私にエラーを与えました、しかしこのブログ投稿から、私は以下の方法を使用しました、そしてそれは働きました。

from types import MethodType
Person.is_midwestern = MethodType(is_midwestern, p)
于 2018-06-15T14:43:52.353 に答える