我有两个ndb类 - 用户和图像。
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)
Image表中可能有多个用户图像。我必须得到每个用户的前3个图像。我想在一次通话中获取所有记录。我必须使用ndb tasklet执行此操作。我是ndb的新手,所以任何帮助都会受到赞赏....
答案 0 :(得分:1)
你的问题有点模糊。你都尝试了些什么?您还没有描述如何将图像与用户相关联。
我将假设您正在创建Image
实体,其中User
实例作为密钥中的父实体。
e.g。
img = Image(parent=some_user.key)
现在我们可以为用户检索图像了。虽然你没有定义前3个图像的构成,但我会根据最近的3个图像来假设它。
images = Image.query(ancestor=some_user.key).order(Image.updated_at).fetch(3)
这为我们提供了3个图像实体。
现在我们遇到了一些问题。您正在存储文件名和图像URL。如果要将图像存储在其他位置,为什么要保留文件名?确实如此,或者您实际上是计划将图像存储在数据存储区或GCS中,如果这两个选项中的任何一个都是这种情况,那么您需要适当地更改图像类。如果您只是将URL存储到某个远程图像资源,那么我看不出任何使用tasklet的理由,实际上根本不确定是否有任何理由在此刻使用tasklet。
因此,要继续推进解决方案,您需要包括存储/提供图像的方式以及从何处。然后我们可以进一步阐述解决方案。