Один из способов сделать это, используя свойства python:
class WebSvc(models.Model):
...
def _get_state():
return self.cast().get_state()
state = property(_get_state)
Преимущества: запускается только тогда, когда требуется свойство.
Возможный недостаток: при многократном вызове свойства веб-служба будет вызываться заново (может потребоваться поведение, но я сомневаюсь в этом). Вы можете кэшировать, используя памятку.
Другой способ, просто сделайте это, переопределив init:
class WebSvc(models.Model):
...
def __init__(*args, **kwargs):
super(WebSvc, self).__init__(*args,**kwargs)
self.state = self.caste().get_state()
Преимущества: будет вычисляться только один раз за экземпляр без необходимости запоминания.
Возможный недостаток: будет рассчитываться для каждого экземпляра объекта.
Однако в большинстве типичных случаев с django вы будете запускать только один раз свойства объекта и, вероятно, не будете создавать экземпляр объекта, для которого вы не будете использовать свойство .state. Таким образом, в этих случаях подходы более или менее похожи по «производительности».