NDB StructuredProperty запрос неожиданный результат - PullRequest
0 голосов
/ 03 декабря 2018

У меня есть эта модель:

class State(ndb.Model):
  code = ndb.StringProperty(required=True)
  name = ndb.StringProperty(required=True)
  city_list = ndb.StructuredProperty(City, repeated=True)
  country = ndb.KeyProperty(required=True)

class City(ndb.Model):
  code = ndb.StringProperty(required=True)
  name = ndb.StringProperty(required=True)

Я реализовал этот запрос:

 stateData = State.query( State.city_list.name == 'xyz', State.name=='Punjab' ).fetch()

Я хочу реализовать запрос на State, где имя Punjab.Но у Punjab есть много городов, поэтому я отфильтровал по названию города xyz.

Я ожидаю только город xyz, но в результате получаю все города.

Как я могу получить только xyz город в результате?

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

вы должны отфильтровать, прежде чем вы получите.приведенный ниже синтаксис основан на более старой версии ndb, где вы используете свойство Key

class State(ndb.Model):
  code = ndb.StringProperty(required=True)
  name = ndb.StringProperty(required=True)
  city_list = ndb.KeyProperty(kind=City, repeated=True)
  country = ndb.KeyProperty(required=True)

stateq = State.query( State.name=='Punjab' )
city=stateq.filter(State.City==citykey)
result=city.fetch()

Я не пробовал, но, вероятно, это будет работать и для структурированного свойства.

0 голосов
/ 03 декабря 2018

Вы запрашиваете State виды, поэтому результаты будут State сущностями с их complete city_list свойством - вы не можете получить только подмножество city_list.Так что то, что вы получаете, ожидается.

Возможно, вы могли бы сделать проекционный запрос, и в этом случае вы получите список State сущностей, каждая из которых имеет только один город в city_list, см. Проекции и многозначные свойства .Не упустите ограничения .

Или вы можете изменить дизайн своих моделей, возможно, с отдельными объектами City, к которым вы можете обращаться напрямую (вместо структурированных свойств внутри объекта State).

...