데이터베이스에 적중하지 않고 DB.ReferenceProperty의 핵심 가치를 얻으려면 어떻게해야합니까?
-
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 데코레이터를 메소드에 올려 놓을 수도 있습니다.