2009-07-17 3 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.objects.filter (last_name =' Франклин)
>>> person.is_midwestern
'Person' object has no attribute
«is_midwestern'`

+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 например

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

good :), так что вы можете выбрать его как ответ –

Смежные вопросы