2010-02-07 3 views
6

Google App Engine SDK 및 Python을 사용하여 문제가 발생했습니다. 특정 엔터티 속성의 ID 속성에 액세스 할 수 없습니다. 내가 액세스 할 수있는 유일한 속성 (아래 답변을 참조) 내 수업 모델에 정의 된 플러스 키 속성을 다음과 같습니다데이터 저장소 엔터티에서 ID 속성에 액세스 할 수 없습니다.

class Question(db.Model): 
    text = db.StringProperty() 
    answers = db.StringListProperty() 
    user = db.UserProperty() 
    datetime = db.DateTimeProperty() 

내가 텍스트, 답변, 사용자, 날짜 및 주요 특성을 잘 액세스 할 수 있습니다. 그러나 ID 속성에 액세스 할 수 없습니다.

# OK Within a template, this will return a string : 
{{ question.text }} 
# OK, this will return the entity key : 
{{ question.key }} 

# KO this will return nothing : 
{{ question.id }} 

어떤 아이디어 : 예를 들어, 모든 엔티티를 가져 오는 후 (Question.all()를 사용)? 감사 !

+0

키와 ID는 데이터 저장소 엔터티의 속성이 아닙니다. key()는 인스턴스 메소드이고, id()는 Key의 인스턴스 메소드입니다. {{entity.key.id}}는 비트 뒤에 있기 때문에 작동합니다. 적절한 경우 메서드 호출로 해석됩니다. – geoffspear

답변

10

documentation에 따르면 모델 서브 클래스에 대해 정의 된 인스턴스 메소드가 없습니다.

대신 {{ question.key }}을 시도하십시오.

엔터티가 데이터 저장소에 저장 될 때까지 키가 만들어지지 않습니다.


편집 : OP의 편집에 따라 추가 정보를 원하시면 :

우리가 숫자 ID, 우리는 우리의 템플릿에 이런 일을 할 수있는 후 정말이야 이후 :

{{ question.key.id }}

또 다른 참고 사항 : 엔티티 생성 순서에 따라 숫자 ID의 값이 증가하지 않을 것입니다. 실제로 이것은 항상 그렇지만 항상 그런 것은 아닙니다.

+0

실제로 {{question.key}}는 올바르게 작동하고 데이터 저장소에 저장된 키를 반환합니다. 두 번 확인 했어야 했어! 원래 게시물을 수정할 수 있습니다. 그래서 나는 ID를 검색하는 것이 유일한 남은 문제라고 생각합니다. – jbmusso

+0

빠른 답변을 주셔서 감사합니다. 내 문제를 완벽하게 해결했습니다. – jbmusso

+0

@Sorw : 언제든지. 에 오신 것을 환영합니다. – bernie

5

방금 ​​(부끄럽지 않은, IMO) 해결책을 찾았습니다. 수동으로 쿼리하고 그들 모두를 통해 실체, 루프를 가져 와서 한 id 매개 변수를 추가

query = Question.all() 
questions = query.fetch(10) 

# Add ID property : 
for question in questions: 
    question.id = str(question.key().id()) 

나는 그것을 효율적으로 CPU 현명하다고 생각하지 않는다,하지만 빠른/더러운 수정으로 작동합니다.

+0

@ 술 : 당신은 이것을 할 필요가 없습니다. 내 편집 된 답변보기 – bernie

+0

@ Adam : hehe 나는 동시에 둘 모두 가능한 해결책을 찾았다 고 생각하지만, 훨씬 더 간단합니다! – jbmusso

+0

해결책을 찾기 위해 천박하고, 아마도 +1하지만. – bernie

관련 문제