1

それが指す実際のエンティティを逆参照せずに、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>
4

2 に答える 2

13

実際、あなたが主張している ReferenceProperty のキーへのアクセス方法は、将来存在しない可能性があります。Python の '_' で始まる属性は、その実装と密接に結びついて親密なものはそれらを使用できるという点で「保護されている」と一般に認められていますが、実装で更新されるものは変更時に変更する必要があります。

ただし、公開インターフェイスを介して参照プロパティのキーにアクセスできる方法があり、将来的には安全になります。上記の例を次のように修正します。

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

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

関連付けられているクラスを介してプロパティにアクセスすると、プロパティ オブジェクト自体が取得されます。これには、基になる値を取得できるパブリック メソッドがあります。

于 2008-10-02T22:17:40.930 に答える
1

その通りです。キーは、'_' で始まるプロパティ名として保存されます。モデルオブジェクトで直接アクセスできるはずです。あなたがしようとしていることを実証できますか?私は過去にこの手法を問題なく使用しました。

編集: series_id() を直接呼び出したり、テンプレートで _series を直接参照したりしましたか? このコンテキストでメソッドを指定した場合、Django が引数なしでメソッドを自動的に呼び出すかどうかはわかりません。メソッドに @property デコレータを配置することもできます。

于 2008-09-26T21:30:58.177 に答える