概要
Djangoで見る_meta
とはどんなツールなのか?
実際にサンプルコード触りながら調べてみたので紹介します。
前提
以下のようなDBテーブルを作成したとします。
models.py
は以下の通り。
class Country(models.Model):
name = models.CharField(max_length=100, null=True, blank=True)
capital = models.CharField(max_length=100, null=True, blank=True)
population = models.IntegerField(null=True, blank=True)
continent = models.CharField(max_length=50, null=True, blank=True)
language = models.CharField(max_length=50, null=True, blank=True)
currency = models.CharField(max_length=50, null=True, blank=True)
class Meta:
db_table = 'country'
サンプルコード1
DjangoのCountry
モデルの全てのフィールド名を取得し、それらを出力するサンプルコードはこちら。
_meta
はDjangoのモデルメタデータオプションで、モデルに関するメタデータにアクセスするために使用します。
from world.models import Country
# Countryモデルの全てのフィールドを取得
fields = Country._meta.fields
print(fields)
# 結果
# (<django.db.models.fields.BigAutoField: id>, <django.db.models.fields.CharField: name>, <django.db.models.fields.CharField: capital>, <django.db.models.fields.IntegerField: population>, <django.db.models.fields.CharField: continent>, <django.db.models.fields.CharField: language>, <django.db.models.fields.CharField: currency>)
for field in fields:
print(f"Field Name: {field.name}")
print(f"Field Type: {field.get_internal_type()}")
# 結果
# Field Name: id
# Field Type: BigAutoField
# Field Name: name
# Field Type: CharField
# Field Name: capital
# Field Type: CharField
# Field Name: population
# Field Type: IntegerField
# Field Name: continent
# Field Type: CharField
# Field Name: language
# Field Type: CharField
# Field Name: currency
# Field Type: CharField
fields
は、モデルの全てのフィールドオブジェクトをリストとして返します。
name
でname属性(フィールドの名前)を返すので、DBでいうカラム名がすべて取得できますね。
field.get_internal_type()
は、そのフィールドの内部タイプを文字列として返すメソッド。これにより、どんなデータ型かどうかがわかります。CharField
、IntegerField
などどのような種類かわかります。
サンプルコード2
他にもフィールドオブジェクトには多くのメソッドがあるようです。
from world.models import Country
meta = Country._meta
# モデルの名前を取得
print(f"Model Name: {meta.verbose_name}")
# 結果
# Model Name: country
# モデルの主キーのフィールド名を取得
print(f"Primary Key Field Name: {meta.pk.name}")
# 結果
# Primary Key Field Name: id
# モデルの特定のフィールドオブジェクトを取得
print(f"Get Field: {meta.get_field('name')}")
# 結果
# Get Field: world.Country.name
参考
他にも色々メソッドがあり、以下で紹介されています。
ご参考までに。
公式ドキュメント