1

我有我的項目有以下型號和相應的方法:NDB查詢的祖先不是返回實體

class Users(ndb.Expando): 
    """ 
     flefu users, identified by email. 
     user_gender --> 0 = male; 1 = female; 2 = other; 3 = unknown 
    """ 
    join_date = ndb.DateTimeProperty(auto_now_add=True) 
    user_name = ndb.StringProperty(required=True) 
    user_email = ndb.StringProperty(required=True) 


class UsersPhotos(ndb.Model): 
    """ 
     property to processes a blob upload steps 
     Users child. 
    """ 

    upload_date = ndb.DateTimeProperty(auto_now_add=True) 
    photo_key = ndb.BlobKeyProperty(required=True) 
    photo_serving_url = ndb.StringProperty(required=True) 

    @classmethod 
    def insert_from_form(cls, data): 
     user_key = ndb.Key(Users, data.userId) 

     photo_details = cls(
      parent=user_key, 
      user=user_key, 
      photo_key=data.photoKey, 
      photo_serving_url=data.photoServingUrl 
     ) 

     photo_details.put() 
     photo_details.status = "200" 
     photo_details.parent = user_key.id() 

     return photo_details 

    @classmethod 
    def get_photos_by_users(cls, data): 
     users = Users.query().fetch(20) 

     for user in users: 

      logging.info(str(user.key)) 
      photo_data = cls.query(ancestor=user.key).fetch() 
      logging.info(str(photo_data)) 

     photos = cls.query().fetch(10) 
     logging.info(str(photos)) 

我不知道爲什麼photo_data查詢總是返回一個空列表。 Dev應用程序引擎服務(本地)和託管應用程序引擎服務(遠程)都會返回空列表。

用戶和UsersPhotos種類有以下實體:

用戶:

Users(key=Key('Users', 5629499534213120), join_date=datetime.datetime(2014, 7, 26, 4, 40, 11, 840853), user_email=u'[email protected]', user_name=u'hidden') 

UsersPhotos:

[ 
    UsersPhotos(key=Key('Users', '5629499534213120', 'UsersPhotos', 6192449487634432), photo_key=datastore_types.BlobKey('encoded_gs_file:YXBwX2RlZmF1bHRfYnVja2V0L2Zha2UtdzZSYkpZS1RnTlpkY3JKRVI3dUU2UT09'), photo_serving_url=u'http://127.0.0.1:8080/_ah/img/encoded_gs_file:YXBwX2RlZmF1bHRfYnVja2V0L2Zha2UtdzZSYkpZS1RnTlpkY3JKRVI3dUU2UT09=s300', upload_date=datetime.datetime(2014, 7, 26, 4, 40, 35, 455648)), 
    UsersPhotos(key=Key('Users', '5629499534213120', 'UsersPhotos', 6473924464345088), photo_key=datastore_types.BlobKey('encoded_gs_file:YXBwX2RlZmF1bHRfYnVja2V0L2Zha2UtcmZiYU5WNEFSVnZheG81aGQ5dXpNdz09'), photo_serving_url=u'http://127.0.0.1:8080/_ah/img/encoded_gs_file:YXBwX2RlZmF1bHRfYnVja2V0L2Zha2UtcmZiYU5WNEFSVnZheG81aGQ5dXpNdz09=s300', upload_date=datetime.datetime(2014, 7, 26, 4, 41, 12, 322560)) 
] 

有人能指出我在正確的方向?

回答

1

你在混合字符串和int ids:你的Users實體有一個int id,但UsersPhotos父項的ID部分是一個字符串。

當您在insert_from_form方法創建user_key你應該投的價值:

user_key = ndb.Key(Users, int(data.userId)) 
+0

同爲'photo_key = data.photoKey'。值以字符串的形式來自您的表單,但您需要整數。 – GAEfan

+0

photo_key是一個BlobKey,它應該是一個字符串。 – Greg