Django モデルが与えられ、そのすべてのフィールドをリストしようとしています。_meta モデル属性を使用してこれを行う例をいくつか見たことがありますが、meta の前のアンダースコアは、_meta 属性がプライベート属性であり、直接アクセスしてはならないことを示しているのではないですか? ... たとえば、_meta のレイアウトは将来変更される可能性があり、安定した API ではなくなる可能性があります。
_meta はこのルールの例外でしょうか? 安定していてすぐに使える状態でしょうか、それともアクセスするのは悪い習慣とみなされるのでしょうか? あるいは、_meta 属性を使用せずにモデルのフィールドをイントロスペクトする関数やその他の方法はありますか? 以下は、_meta 属性を使用してこれを行う方法を示すリンクのリストです。
アドバイスをいただければ幸いです。
ベストアンサー1
_meta
非公開ですが、比較的安定しています。これを公式化し、文書化し、アンダースコアを削除する取り組みが行われており、1.3 または 1.4 より前に行われる可能性があります。多くの人がとにかく使用しているため、下位互換性を確保するための取り組みが行われると想像しています。
互換性を特に気にする場合は、モデルを受け取ってフィールドを返す関数を記述します。こうすることで、将来何かが変更された場合でも、1 つの関数を変更するだけで済みます。
def get_model_fields(model):
return model._meta.fields
これはオブジェクトのリストを返すと思いますField
。インスタンスから各フィールドの値を取得するには、 を使用しますgetattr(instance, field.name)
。
更新: Django の貢献者は、Google Summer of Code の一環として、_Meta オブジェクトを置き換える API の開発に取り組んでいます。参照:
-https://groups.google.com/forum/#!topic/django-developers/hD4roZq0wyk
-参考: