私はUsertypeを指す外部キーを持つUserモデルを持っているとします。モデルフィールドがフェッチされたかどうかを確認する方法はありますか?
Usertypeテーブルに参加しないでユーザーを取得するだけの場合は、最後にアクセスしたときにそのUsertypeを取得する追加のクエリがあります。
私の質問は、そのようなフィールドが既に埋め込まれているか、または私のアクセスがフェッチを引き起こすかどうかを確認する方法があるかどうかです。このような
何か:私はこのようにそれを行う場合
class Usertype(BaseModel):
name = CharField(max_length=32)
def serializable(self):
return {
'name': self.name
}
class User(BaseModel):
name = CharField(max_length=32)
usertype = ForeignKeyField(Usertype)
def serializable(self):
ret = {
'name': self.name,
}
if self.usertype:
ret['usertype'] = self.usertype.serializable()
return ret
、私の仮定は、if文はそれが起こることをフェッチ引き起こすことです。
更新:
タラスの答えから、私は、キャッシュされた関連オブジェクトを保持している、モデルの_obj_cacheプロパティがあることを把握することができました。 だから私は私が望むものを達成することができます
def serializable(self):
ret = {
'name': self.name,
}
if 'usertype' in self._obj_cache:
ret['usertype'] = self.usertype.serializable()
return ret
しかし、これは内部フィールドをいじり、偉大なアプローチのように見えていません。
ありがとうございました!私はそれがうまくいくかどうか、私が持っているピーウィーバージョンではっきりとはうまくいかないかどうかを確かめようとしていました。そのキャッシュを保持する各モデルに_obj_cacheディクショナリがあるようです。ですから、user._obj_cacheに "usertype"があれば "できます。" – manecosta
私はそれが可愛いわけではなく、変更される可能性が高いことに同意します。 coleiferがよりサポートされたアプローチを提供できるかどうかを私は待っています。 – manecosta