Python ndb: 数据存储中的键是这样存储的[datastore_types.Key.from_path(...)]

2024-03-28 19:49:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我通过HTTP请求得到一个包含一个或多个密钥id(urlsafe Key)的json数组。现在我想将这个Id/Id的key/keys存储在我定义的UserListProperty中。它将我定义的用户属性扩展到ndb.KeyProperty属性。在

所以如果我只使用一个键就可以使用用户属性。。一切都好。密钥通常存储在数据存储中并作为引用。但是当我使用UserListProperty时(即使只有一个键),数据存储将其存储为:[datastore_types.Key.from_path(u'Example', 20L, u'User', 21L, _app=example~db')]

我把钥匙放哪儿?它位于另一个具有UserListProperty的模型实例列表的属性(读取器)中。在

好的,所以我认为我必须在UserListProperty定义或写入这个属性的方式上做错了什么。我想展示两个:

class UserProperty(ndb.KeyProperty):
    def __init__(self, *args, **kwargs):
        super(UserProperty, self).__init__(*args, **kwargs)
        self._visible = False
        self._verbose_name = 'User key'


class UserListProperty(UserProperty):
    def __init__(self, *args, **kwargs):
        super(UserListProperty, self).__init__(*args, **kwargs)
        self._repeated = True
        self._visible = False
        self._verbose_name = 'List containing user keys.'

^{pr2}$

希望有人能帮我。。我读到一些关于数据库参考属性试着把它放在这里(而不是KeyProperty)。但它不起作用。也许我做错了什么。或者根本没用。在


Tags: key用户selfid属性定义init密钥
1条回答
网友
1楼 · 发布于 2024-03-28 19:49:02

你的代码可能真的能正常工作。你看到的绳子:

[datastore_types.Key.from_path(u'Example', 20L, u'User', 21L, _app=example~db')]

看起来像一个包含一个键对象的列表的repr(),这正是您想要的。在

也许你设置其余代码的方式有问题(例如,定义reader属性的model类)?在

要访问由重复的KeyProperty引用的实体(这是您正在做的),您必须使用一个循环,例如

^{pr2}$

注:我不会设置self.\u像您一样在您的初始化中重复;我会将它传递给超级调用,如下所示:

super(UserListProperty, self).__init__(*args, repeated=True, **kwargs)

什么是可见的?如果您不需要它,也许不用定义KeyProperty的琐碎子类,只需使用以下命令:

reader = KeyProperty(Example, repeated=True)

关于ReferenceProperty,它来自旧的db模块,最好忘记它。在

相关问题 更多 >