8

나는 이름, 이메일 및 추종자 속성을 가진 사용자 클래스가있는 간단한 시나리오가 있습니다.ndb.KeyProperty를 사용하여 동일한 모델을 참조하는 방법?

class User(ndb.Model): 
    name = ndb.StringProperty(required = True) 
    search_name = ndb.StringProperty(required = True) 
    pw_hash = ndb.StringProperty(required = True) 
    email = ndb.StringProperty() 

    follows = ndb.KeyProperty(Follow, repeated=True) 
    followers = ndb.KeyProperty(User, repeated=True) 

실행 중에 오류가 발생합니다. 은 "추종자"속성을 모델링 방법에 대한

File "C:\ujjal\my project\cravel\code2\Users.py", line 46, in User 
    followers = ndb.KeyProperty(User, repeated=True) 
NameError: name 'User' is not defined 
INFO  2012-09-11 11:45:23,953 dev_appserver.py:2967] "GET/HTTP/1.1" 500 - 

어떤 제안은 높게 평가 될 것이다.

followers = ndb.KeyProperty(repeated=True) 

나, 난 당신을 생각 키의 유형을 지정, 후입니다 : 사전

답변

29

만 키의 종류 종류의 사용자이어야 수 있는지 확인합니다. 따라서 필요한 경우 키 프로퍼티를 종류없이 사용할 수 있습니다. 그것은 ndb cheat sheet

더 나은 조금 설명 것

followers = ndb.KeyProperty(kind='User', repeated=True) 

: 모든 추종자 키 (사용자 모델 내부) 종류 사용자의해야한다는 강제하려는 경우

그러나, 다음 따옴표 종류를 둘러싸고

+0

완벽, @Bert에게 당신의 의견을 주셔서 감사합니다. – ujjalcal

+0

이 문제는 ndb와 관련이 없습니다. 클래스가 정의 될 때까지 유형을 기준으로 클래스를 참조 할 수 없습니다. 그래서 ndb를 사용하면 종류 또는 파이썬 유형 객체에 문자열 이름을 사용할 수 있습니다. –

2

에서 덕분에 당신은 단지 "추종자"그럼 그냥 넣어의 KeyProperty로합니다.

follows = ndb.KeyProperty(kind=User,repeated=True) 

아마 kind=User이 누락 된 것 같습니다. 키의 프로퍼티 e.g. some_prop = ndb.KeyProperty(User)에 종류를 사용

https://developers.google.com/appengine/docs/python/ndb/properties#types

+0

'kind = User'를 시도했지만 작동하지 않았습니다. 첫 번째 작업은 성공했습니다. 그러나 'kind = User' 또는 단순히'User'가 왜 작동하지 않는지 아직 명확하지 않습니다. – ujjalcal

+0

개인적으로 나는 User를 이름으로 사용하는 것을 피합니다. 그것은 충돌 할 가능성이 너무 많습니다. 이름 바꾸기 제안, 다시 시도하십시오. 그러나 종류를 사용하면 키를 할당 할 때 특정 종류의 키가 할당됩니다. 모델의 이름을 따옴표로 묶어 문자열로 넣을 수도 있습니다. 실제로 사용하는 것은 중요하지 않으므로 그렇게하십시오. –

+0

입력 해 주셔서 감사합니다. 당신이 옳다면, 그 종류의 것을 넣어서 문제를 해결하십시오. 내가 얻지 못하는 한가지는 당신의 코멘트입니다. ** 개인적으로 나는 User를 이름으로 사용하는 것을 피합니다. 충돌 가능성이 너무 큽니다 ** 조금 더 설명 할 수 있습니까? – ujjalcal

관련 문제