데이터베이스에 적중하지 않고 DB.ReferenceProperty의 핵심 가치를 얻으려면 어떻게해야합니까?

StackOverflow https://stackoverflow.com/questions/141973

  •  02-07-2019
  •  | 
  •  

문제

DB.ReferenceProperty의 키 (또는 ID) 값을 얻는 방법이 있습니까? 나는 주위를 파고 있었다 - 키가 _로 선행 된 속성 이름으로 저장된 것처럼 보이지만, 코드가 작동 할 수는 없었다. 그 예는 대단히 감사 할 것입니다. 감사.

편집 : 다음은 실패한 내용입니다.

class Comment(db.Model):
    series = db.ReferenceProperty(reference_class=Series);

    def series_id(self):
        return self._series

그리고 내 템플릿에서 :

<a href="games/view-series.html?series={{comment.series_id}}#comm{{comment.key.id}}">more</a>

결과:

<a href="games/view-series.html?series=#comm59">more</a>
도움이 되었습니까?

해결책

실제로, 당신이 참고 자료의 키에 액세스하는 것을 옹호하는 방식은 미래에 존재하지 않을 수 있습니다. 파이썬에서 '_'로 시작하는 속성은 일반적으로 구현과 밀접하게 구현되고 친밀한 것들이 사용할 수 있지만 구현으로 업데이트되는 것들이 변경 될 때 변경해야한다는 점에서 "보호"로 인정됩니다.

그러나 공개 인터페이스를 통해 참조 전성기 키에 액세스하여 향후 안전 할 수있는 방법이 있습니다. 위의 예를 수정하겠습니다.

class Comment(db.Model):
    series = db.ReferenceProperty(reference_class=Series);

    def series_id(self):
        return Comment.series.get_value_for_datastore(self)

연관된 클래스를 통해 속성에 액세스하면 속성 객체 자체가 표시되며,이 값은 기본 값을 얻을 수있는 공개 메소드가 있습니다.

다른 팁

당신은 맞습니다 - 키는 '_'로 접두사 이름으로 저장됩니다. 모델 객체에서 직접 액세스 할 수 있어야합니다. 당신이 시도하는 것을 보여줄 수 있습니까? 과거 에이 기술을 문제없이 사용했습니다.

편집 : Series_id ()를 직접 호출했거나 템플릿에서 _Series를 직접 참조하려고 했습니까? 이 맥락에서 Django가 인수없이 메소드를 자동으로 호출하는지 여부는 확실하지 않습니다. @property 데코레이터를 메소드에 올려 놓을 수도 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top