Как получить значение ключа db.ReferenceProperty без попадания в базу данных? - PullRequest
1 голос
/ 27 сентября 2008

Есть ли способ получить значение ключа (или идентификатора) объекта db.ReferenceProperty без разыменования фактической сущности, на которую он указывает? Я копался - похоже, ключ хранится как имя свойства, которому предшествует _, но я не смог заставить работать какой-либо код. Примеры будут высоко оценены. Спасибо.

РЕДАКТИРОВАТЬ: Вот то, что я безуспешно пытался:

class Comment(db.Model):
    series = db.ReferenceProperty(reference_class=Series);

    def series_id(self):
        return self._series

И в моем шаблоне:

<a href="games/view-series.html?series={{comment.series_id}}#comm{{comment.key.id}}">more</a>

Результат:

<a href="games/view-series.html?series=#comm59">more</a>

Ответы [ 2 ]

13 голосов
/ 03 октября 2008

На самом деле, способ, которым вы защищаете доступ к ключу для ReferenceProperty, вполне может не существовать в будущем. Атрибуты, которые начинаются с '_' в python, как правило, считаются "защищенными" в том смысле, что вещи, которые тесно связаны и тесно связаны с их реализацией, могут их использовать, но вещи, которые обновляются с реализацией, должны меняться при ее изменении.

Однако через открытый интерфейс можно получить доступ к ключу для вашего ссылочного свойства, чтобы оно было в безопасности в будущем. Я пересмотрю приведенный выше пример:

class Comment(db.Model):
    series = db.ReferenceProperty(reference_class=Series);

    def series_id(self):
        return Comment.series.get_value_for_datastore(self)

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

1 голос
/ 27 сентября 2008

Вы правы - ключ хранится как имя свойства с префиксом '_'. Вы должны просто иметь возможность доступа к нему непосредственно на объекте модели. Можете ли вы продемонстрировать, что вы пытаетесь? Я использовал эту технику в прошлом без проблем.

Редактировать: Вы пытались напрямую вызывать series_id () или ссылаться на _series в шаблоне? Я не уверен, будет ли Django автоматически вызывать методы без аргументов, если вы укажете их в этом контексте. Вы также можете попробовать добавить в метод @property декоратор.

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