2009-07-17 2 views
1

대화식 세션 (iPython)에서 기존 클래스에 모델 메서드를 어떻게 추가합니까?

기본 모델이 있습니다.

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 ='프랭클린 ')
>>> person.is_midwestern
'Person' object has no attribute
'is_midwestern'`

+0

내가 원하는 것이 분명하지 않습니다. ipython은 파이썬 셸을 에뮬레이션합니다. 그래서 다른 것보다 다를 수 없습니다. 더 잘 설명하십시오. –

+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'`

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

좋은 :) 그래서 당신은 대답으로 선택할 수 있습니다 –

관련 문제