データベースにヒットせずにdb.ReferencePropertyのキー値を取得するにはどうすればよいですか?
-
02-07-2019 - |
質問
実際のエンティティを参照せずに、db.ReferencePropertyのキー(またはid)値を取得する方法はありますか?掘り下げてみました-プロパティ名に_が付いたキーが保存されているように見えますが、コードを機能させることができません。例をいただければ幸いです。ありがとう。
編集:これは私が試みたが失敗したものです:
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>
解決
実際、ReferencePropertyのキーへのアクセスを提唱する方法は、将来存在しない可能性があります。 Pythonで「_」で始まる属性は、一般に「保護」されることが認められています。その実装と密接に結びついて密接に関係しているものはそれらを使用できますが、実装で更新されるものは、変更時に変更する必要があります。
ただし、パブリックインターフェイスを介して、参照プロパティのキーにアクセスして、安全に参照する方法があります。上記の例を修正します。
class Comment(db.Model):
series = db.ReferenceProperty(reference_class=Series);
def series_id(self):
return Comment.series.get_value_for_datastore(self)
関連付けられたクラスを介してプロパティにアクセスすると、プロパティオブジェクト自体が取得されます。プロパティオブジェクトには、基になる値を取得できるパブリックメソッドがあります。
他のヒント
あなたは正しいです-キーはプロパティ名として接頭辞「_」として保存されます。モデルオブジェクト上で直接アクセスできる必要があります。あなたがしようとしていることを実証できますか?私は過去にこのテクニックを問題なく使用しました。
編集:series_id()を直接呼び出したり、テンプレート内の_seriesを直接参照しようとしましたか?このコンテキストでメソッドを指定した場合、Djangoが引数なしでメソッドを自動的に呼び出すかどうかはわかりません。メソッドに@propertyデコレータを配置することもできます。