문제

클래스 메시지 (db.model) :

user = db.ReferenceProperty(User, required=True, collection_name='Message_set')  
text = db.TextProperty(required=True)

나는 이것을 시도했지만 GQL 문에서 badvalueerror를 얻고 있습니다.

사용자 = [

users.append (usera)

user.Append (userb)

user.Append (USERC)

message = message.gql ( 'user in : user', user = user) .fetch (100)

도움이 되었습니까?

해결책

완전한 스택 트레이스 없이는 말하기는 어렵지만 (제발?), 키가 아닌 통과 된 엔티티가되는 것을 좋아하지 않는다고 생각합니다. 이 시도:

users = [userA.key(), userB.key(), userC.key()]
messages = Message.gql("WHERE user in :users", users=users).fetch(100

다른 팁

그만큼 IN GQL의 연산자 = 그것들을 가져오고 연결하는 것 - 그것은 실제로 기본 상점의 기능의 일부가 아니므로 불행히도 약간의 한계가 적용됩니다 (그리고 그 성능은 결코 좋지 않습니다). Python API에 포함시키는 것이 훌륭한 설계 결정인지 확실하지 않습니다 (Java API에서는 복제되지 않았다고 생각합니다). (btw, the != 연산자도 비슷한 문제가 있습니다).

특히 이것이 의도 된 사용법을 방해 해야하는 이유는 확실하지 않지만 "쿼리"객체가 DataStore의 인스턴스 인 Plain DataStore.query의 인스턴스 인 것으로 의심됩니다. 애플리케이션 수준 파이썬 코드 GAE 지원 응용 프로그램 레벨 파이썬 코드는 일반적으로 무엇을 하는가? SDK 소스 파일 파일 Google/Appengine/API/Datastore.py, 특히 다중 클래스 - 결국에는 모든 별도의 쿼리를 수행하고 결과를 병합하는 것으로 간주됩니다 (필요한 경우 정렬 된 순서로, 그러나 그렇습니다. 여기서는 그 사실 인 것 같습니다).

이 모델로 :

class MyUsuario(db.Model):
    nombre=db.StringProperty(required=True)

class Message(db.Model):
    MyUsuario = db.ReferenceProperty(MyUsuario, required=True, collection_name='Message_set')  
    text = db.StringProperty(required=True)

이 코드는 작동합니다.

from modelos import MyUsuario, Message
from google.appengine.ext import db

usuarios=MyUsuario.all()

userA=usuarios[0]
userB=usuarios[1]
userC=usuarios[2]

usuarios= []

usuarios.append(userA.key())
usuarios.append(userB.key())
usuarios.append(userC.key())

messages = db.GqlQuery('select * from Message Where MyUsuario In :usuari', usuari=usuarios)

for message in messages:
    print message.text

나는 awnser를 보았다 이 Google Groups 게시물에서

사용자 키 목록을 원할 것 같아요? 사용자.append (usera.key ())을 시도하십시오. 사용자 ReferenceProperty의 값은 사용자 엔티티의 핵심입니다.

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