1

Я работаю над приложением на Django и движке Google. В моем приложении у меня есть несколько моделей с несколькими полями ReferenceProperty. Проблема в том, что если какое-либо из полей ReferenceProperty удаляется, он создает связанные с ReferenceProperty ошибки во всех других моделях, где он был использован. То, что я хочу, когда удаляется поле, говорит, что Пользователь удален, все поля, содержащие User как ReferenceProperty, должны работать без сообщений об ошибках, отображающих связанного пользователя как недоступные или что-то в этом роде.Проблемы с движком Django Google для приложений

Может кто-нибудь предложить, как это можно сделать?

Заранее спасибо.

ответ

0

два возможных решения:

  • Проверьте, если ссылка все еще существует, прежде чем получить доступ к нему:

    если не obj.reference:
    # Реферировано объект был удален

  • Когда вы удаляете объект модели, на который можно ссылаться, запросите все модели, которые могут ссылаться на него, и установите для их ссылочного свойства значение None.

+0

Когда вы удаляете объект модели, на который можно ссылаться, запросите все модели, которые могут ссылаться на него, и установите для их ссылочного свойства значение None. Я думаю, что это то, что на самом деле происходит автоматически, когда ссылка удалена, она становится None? –

+0

Ничего такого не происходит автоматически. Все ссылки останутся (и будут недействительными). http://code.google.com/appengine/docs/python/datastore/entitiesandmodels.html#References – benwixen

0

Когда у меня такая же проблема, я не нашел общего решения. Единственный способ, который я нашел, - попробовать/исключить любое свойство ссылки. Если вы найдете еще один ответ, напишите здесь.

+0

В моем последнем проекте я создал несколько сигналов pre_delete, которые установили бы свойство reference для пользователя по умолчанию, как только пользователь будет удален. Но здесь этот метод не кажется хорошим способом из-за большого набора моделей. –

+0

BTW Ilian, как вам удалось избежать проблемы с использованием обработки исключений на передней панели и панели администратора? Я буду признателен за некоторый пример. –

+0

К сожалению, я не нашел способ обработать исключения, созданные из шаблонов, только те из файлов python. Возможно, вы можете использовать что-то вроде пользовательского тега шаблона, чтобы проверить, существует ли ссылка и что-то делать, если нет, но я не уверен. –

1

Вы также можете просто установить флаг, скажем deleted, на сущности вы удаляете, а затем оставить его в хранилище данных. Это имеет то преимущество, избежать всех проблем ссылочной целостности, в первую очередь, но это происходит за счет двух основных недостатков:

  1. Все существующие запросы должны быть изменены, чтобы иметь дело с юридическими лицами, которые имеют множество deleted свойств , либо опуская их из результирующего набора, либо каким-то специальным корпусом.
  2. Данные "Удалены" хранятся в хранилище данных; это может раздуть хранилище данных, а также не может быть вариантом для конфиденциальной информации.

Это на самом деле не решит вашу проблему, но я думал, что упомянул об этом ради полноты.

+0

Спасибо за ваш ответ cameron, но это решение невозможно на этом этапе разработки с большим набором моделей. –

Смежные вопросы