Как удалить элемент из db.ListProperty? - PullRequest
2 голосов
/ 10 сентября 2011

В решении Google App Engine (Python) я использовал db.ListProperty как способ описания отношения «многие ко многим», например:

class Department(db.Model):
  name = db.StringProperty()

  @property
  def employees(self):
    return Employee.all().filter('departments', self.key())

class Employee(db.Model):
  name = db.StringProperty()
  departments = db.ListProperty(db.Key)

Я создаю много-отношения ко многим, просто добавив ключ Department в db.ListProperty следующим образом:

employee.departments.append(department.key())

Проблема в том, что я не знаю, как на самом деле снова удалить это отношение, когда оно больше не нужно.

Я пробовал поискать его в Google, но я не могу найти какую-либо документацию, подробно описывающую свойство db.ListProperty.

Есть идеи или ссылки?

Ответы [ 2 ]

3 голосов
/ 12 сентября 2011

ListProperty - это просто Python list с некоторыми вспомогательными методами для работы с GAE, поэтому все, что относится к list, относится к ListProperty.

employee.departments.remove(department.key())
employee.put()

Имейте в виду, что данные должны десериализовываться / повторно сериализироваться каждый раз, когда вносятся изменения, поэтому, если вы ищете скорость при добавлении или удалении отдельных значений, вы можете использовать другой метод моделирования отношений, такой как в * 1008.* Модель отношений раздел этой страницы .

Метод ListProperty также имеет недостаток, заключающийся в том, что иногда создает очень большие индексы , если вы хотите выполнить поисксписки в запросе хранилища данных.Это не может быть проблемой для вас, поскольку ваши списки должны быть относительно небольшими, но об этом следует помнить в будущих проектах.

1 голос
/ 10 сентября 2011

Найдено методом проб и ошибок:

employee.departments.remove(department.key())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...