#django #google-app-engine #django-models #django-nonrel
#django #google-app-engine #django-модели #django-nonrel
Вопрос:
Я использую django-nonrel
(http://www.allbuttonspressed.com/projects/djangoappengine ) в Google App Engine. У меня есть настройки моих моделей и т.д., И все работает отлично. Однако у меня возник один вопрос. Я хочу иметь возможность доступа к ключу объекта. Учитывая модель с именем ‘Review’, я делаю, Review.objects.get(pk = 1).key()
что выдает ошибку ( AttributeError
).
Есть ли какой-либо способ, которым я могу получить ключ данного объекта, чтобы я мог использовать его вместо того, чтобы быть вынужденным использовать pk / id? Я хочу использовать ключ в качестве уникального идентификатора для уникальных и секретных URL-адресов (если у кого-то есть лучшее предложение для достижения этого, я весь внимание).
Комментарии:
1. Хотя ключи могут быть неочевидны с первого взгляда, их ни в коем случае не следует считать секретными , возможно, стоит рассмотреть возможность сохранения хэшей SHA1 некоторой уникальной части ваших объектов для использования в ваших «секретных» URL-адресах
2.
1
это не ключ — это идентификатор, который является только частью ключа.3. Два приведенных ниже ответа, похоже, не работают. Ришабх — У тебя получилось это сделать?
Ответ №1:
Вы можете получить идентификатор, вызвав object.key().id(), который возвращает уникальный ключ внутри python.В шаблонах вы можете просто вызвать object.key.id . Затем вы можете использовать get_by_id для получения объекта
Комментарии:
1. Похоже, это не работает с
django-nonrel
. Вместо этого я беру на заметку то, что сказал Крис, и генерирую хэши SHA1 на основе уникальной строки.
Ответ №2:
Вы можете получить свой первичный ключ в django-nonrel из метаданных:
review._meta.pk
или для имени ключа: key=getattr(обзор,review._meta.pk.column)
По-видимому, поле ‘id’ изменяется в зависимости от того, находитесь ли вы на сервере разработки или на производственном сервере. Итак, это работает!
ссылка:http://www.b-list.org/weblog/2007/nov/04/working-models
Комментарии:
1. Первичный ключ не совпадает с ключом GAE.