2014-02-03 2 views
0

У меня есть два класса ndb - пользователь и изображения.get_multi_async using ndb tasklets

class User(ndb.Model): 
    created_at = data.UTCDateTimeProperty(auto_now_add=True) 
    updated_at = data.UTCDateTimeProperty(auto_now_add=True, auto_now=True, indexed=False) 

    age = ndb.IntegerProperty() 

    name = ndb.StringProperty() 

    is_verified = ndb.BooleanProperty(default=False) 
    completed_at = data.UTCDateTimeProperty(indexed=False) 



class Image(ndb.Model): 
    created_at = data.UTCDateTimeProperty(auto_now_add=True) 
    updated_at = data.UTCDateTimeProperty(auto_now_add=True, auto_now=True, indexed=False) 

    file = ndb.KeyProperty(indexed=False) 
    user = ndb.KeyProperty() 

    filename = ndb.StringProperty() 
    image_url = ndb.StringProperty(indexed=False) 

В таблице изображений может отображаться несколько изображений пользователя. Я должен получить 3 лучших изображения каждого пользователя. Я хочу получить все записи за один раз. Я должен сделать это с помощью ndb tasklet. Я новичок в ndb, поэтому любая помощь будет оценена ....

ответ

1

Ваш вопрос немного расплывчатый. что ты уже испробовал? Вы также не описали, как вы относите изображения к Пользователю.

Я предполагаю, что вы создаете объекты Image с экземпляром User в качестве родителя в ключе.

например.

img = Image(parent=some_user.key) 

Теперь мы можем получать изображения для пользователя. Хотя вы не определили, что составляет верхние 3 изображения, поэтому я буду считать это на основе последних трех изображений.

images = Image.query(ancestor=some_user.key).order(Image.updated_at).fetch(3) 

Это дает нам 3 объекта изображения.

Теперь у нас есть некоторые проблемы. Вы сохраняете имя файла и URL-адрес изображения. Зачем хранить имя файла, если вы храните изображение где-то еще? Это действительно так, или вы на самом деле планируете хранить изображение в хранилище данных или в GCS, если это один из этих двух вариантов, тогда вам необходимо соответствующим образом изменить класс изображения. Если вы сохраняете только URL-адрес какого-либо ресурса удаленных изображений, я не вижу причин использовать тасклет, фактически не уверен в какой-либо причине использовать таргетку в данный момент.

Чтобы продвинуться вперед по решению, вам необходимо указать, как вы храните/обслуживаете изображения и откуда. Затем мы можем подробнее остановиться на решении.