私は近接検索で使用される地理的オブジェクトを持っています。そのオブジェクトは、さまざまなパスを介して異なるオブジェクトにキーイングされます。Django Queryset - 変数としての複雑な関係パラメータ?
例:他のオブジェクトに
radius_queryset = base_queryset.filter(
user__profile__geo__lat__gte = bounding_box.lat_min,
user__profile__geo__lat__lte = bounding_box.lat_max,
user__profile__geo__lon__gte = bounding_box.lon_min,
user__profile__geo__lon__lte = bounding_box.lon_max,
、その後:
radius_queryset = base_queryset.filter(
blog__geo__lat__gte = bounding_box.lat_min,
blog__geo__lat__lte = bounding_box.lat_max,
blog__geo__lon__gte = bounding_box.lon_min,
blog__geo__lon__lte = bounding_box.lon_max,
)
これは、次の
blog.geo_object
user.profile.geo_object
group.event.geo_object
今、私はこのような文字列のバウンディングボックスの検索を行います一般的な形式:
radius_queryset = base_queryset.filter(
[lookup_path]__geo__lat__gte = bounding_box.lat_min,
[lookup_path]__geo__lat__lte = bounding_box.lat_max,
[lookup_path]__geo__lon__gte = bounding_box.lon_min,
[lookup_path]__geo__lon__lte = bounding_box.lon_max,
)
# where lookup_path = "blog" or "user__profile" in the two above examples
カプセル化はメンテナンス性の良い友人であり、誤植(typo-bug)との闘いの仲間でもあります。
私の質問に:execとeval(ちょっと見苦しい)を使用するのに不足していますが、変数のサブインドにフィルタパラメータ名を取得する方法はありますか?私はここで何か簡単なものを逃している?
1あなたはそれに私を打つが、私は私は=よりよいあると思うので) – cha0site
私は** kwargsからのまわりで私の頭をラップするために、まだましたが、私はそれがどのように動作するかを確認することができます。ありがとう! – Ted
@Ted、**辞書のキーと値のペアをキーワードと引数のペアに展開します。 'func(キーワード=引数)== func(** {キーワード:引数})' –