Я использую структурированное свойство ndb в моем приложении.Модели выглядят так:
Ресурс Внешняя интеграция:
class ResourceExternalIntegration(ndb.Model):
integration_type = ndb.StringProperty()
external_resource_type = ndb.StringProperty()
external_resource_id = ndb.IntegerProperty()
external_group_id = ndb.IntegerProperty()
external_resource_name = ndb.StringProperty()
Resouce Модель:
class Resource(ndb.Model):
owner = ndb.IntegerProperty()
name = ndb.StringProperty()
type = ndb.StringProperty()
external_integrations = ndb.StructuredProperty(ResourceExternalIntegration, repeated=True)
Примечаниечто у меня структурированное свойство как repeated=True
Проблема: У меня есть функция в классе Resource, которая форматирует / сериализует данные, извлеченные из БД.Это выглядит так:
def serialize(self):
external_integrations_list = []
if self.external_integrations:
for external_integration in self.external_integrations:
external_integration_dict = dict()
external_integration_dict['integration_type'] = external_integration.integration_type,
external_integration_dict['external_resource_type'] = external_integration.external_resource_type,
external_integration_dict['external_resource_id'] = external_integration.external_resource_id
external_integration_dict['external_group_id'] = external_integration.external_group_id
external_integration_dict['external_resource_name'] = external_integration.external_resource_name
external_integrations_list.append(external_integration_dict)
resource_data.update(dict(
owner=self.owner,
name=self.name,
type=self.type,
external_integrations=external_integrations_list
))
return resource_data
Теперь в resource_data
атрибут external_integrations
должен быть массивом, и каждый элемент в нем также должен быть массивом, то есть external_resource_id
, external_resource_type
и т. Д.также быть массивом.Это связано с тем, что структурированное свойство было установлено как repeated=True
.Но resource_data
не содержит этого ожидаемого результата.Это выглядит так:
{'name': u 'Scissors lift', 'type': u 'Scissors', 'external_integrations': [{'external_resource_type': (u'FLEET ',),' тип_интеграции': (u'ABC',), 'external_resource_id': 212017856321402L, 'external_resource_name': u "Тест 1", "external_group_id": 5000}], "owner": 5629490125014563L}
И в браузереэто выглядит так:
external_group_id: 5000
external_resource_id: 212017856321402
external_resource_name: "Test 1"
external_resource_type: ["FLEET"]
integration_type: ["ABC"]
т.е. external_group_id
, external_resource_id
, external_resource_name
не отображаются в виде массива, но они ожидаются как массивы.
У меня также есть другая модель, в которой структурированное свойство не существует как repeated=True
.Это выглядит так:
Внешняя интеграция
class ExternalIntegration(ndb.Model):
access_token = ndb.StringProperty()
group_ids = ndb.IntegerProperty(repeated=True)
Профиль
class profile(ndb.Model):
name = ndb.StringProperty()
integration_info = ndb.StructuredProperty(ExternalIntegration)
Здесь функция сериализации профилямодель показывает результат как:
{'gration_info ': {' group_ids ': ([5000],),' access_token ': (u'blahblahblahblah',)}, '' name: 'Test'}
И в браузере результат выглядит так:
access_token: ["blahblahblahblah"]
group_ids: [[5000]]
Я не могу понять, почему access_token
отображается как массив и почему groups_ids
является массивом массива.
Может кто-нибудь помочь мне понять такое поведение структурированного свойства ndb?В частности, случаи, которые я объяснил выше.