Как я могу отсортировать по атрибуту ключевого свойства в Google Cloud/Python?

Используя следующее ndb Модельные классы:

class Product(ndb.Model):
    name = ndb.StringProperty()
    barcode = ndb.StringProperty()

class Donation(ndb.Model):
    user= ndb.UserProperty()
    product = ndb.KeyProperty(kind=Product)

При использовании запроса, такого как:

donations = Donation.query().order(Donation.product).fetch(1000)

Как я могу отсортировать полученные donations от Product name или же barcode?

1 ответ

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

Каждому запросу требуется один или несколько соответствующих индексов хранилища данных. Для упорядоченных запросов вам нужны составные индексы, определенные в index.yaml файл. Каждый такой индекс имеет ровно один kind в его определении нельзя смешивать несколько типов сущностей (Donation с Product в твоем случае).

Если вам нужны такие запросы, вы можете продублировать необходимую информацию и заполнить ее при обновлении product имущество. Также если / когда соответствующие Product изменения свойств вам может потребоваться обновить все Donation лица, ссылающиеся на него.

Возможно, приемлемым промежуточным положением будет использование фактического product значение свойства (сам ключ) для заказа запроса - по крайней мере, у вас будут все пожертвования, связанные с одним и тем же объектом продукта, сгруппированные вместе.

Другие вопросы по тегам