2009-10-26 1 views

답변

8

음, 장고 모델의 인스턴스는 파이썬 객체, 또는 그래서 나는 어쨌든 들었다 : P 내가 어떻게 할 것입니다

:

class MyModel(models.Model): 
    CONSTANT = 1234 
    id = models.AutoField(primary_key=True) # not really needed, but hey 

    @property 
    def big_id(self): 
     return self.pk * MyModel.CONSTANT 

를 분명히, 당신 것 저장하지 않은 모델을 사용하려고하면 예외가 발생합니다. big_id 값을 액세스 할 때마다 계산하지 않고 미리 계산할 수도 있습니다.

당신은 내가 지금 생각할 수있는 두 가지 옵션이있어
+0

감사합니다. 속성은 내가 찾고있는 것입니다 ... – akv

1
class Person(models.Model): 
    x = 5 
    name = .. 
    email = .. 
    def _get_y(self): 
     if self.id: 
      return x * self.id   
     return None 
    y = property(_get_y) 
0

: 가장 좋은 건 self.id을 반환 모델에 대한 방법을 정의하는 것입니다 데이터베이스에

  1. 당신이 필드를 원하지 않기 때문에를 * SOME_CONSTANT, big_id()라고 부른다고합니다. yourObj.big_id()로 언제든지이 메소드에 액세스 할 수 있으며, 템플릿에서 yourObj.big_id로 사용할 수 있습니다 (django 템플릿의 "magic dot"에 대해 읽어 볼 수 있습니다).
  2. DB에 상관 없으면 개체의 save 메서드를 재정 의하여 id * SOME_CONSTANT를 계산하고 big_id 필드에 저장할 수 있습니다. ID가 변경되지 않는다고 가정하므로 매번 계산하지 않아도됩니다.