DjangoのModelを定義するけど、フィールド名を取得したいなと思ったときの備忘録。
<Model>._meta.fiedls
でフィールド名が取得できるらしい
使い方
from django.db import models class Group(models.Model): name = models.CharField(max_length=200) class Member(models.Model): name = models.CharField(max_length=200) group = models.ForeignKey(Group, related_name='members') @classmethod def get_model_fields(cls): """ フィールド名を取得する関数 """ # クラスに定義されているフィールド名を取得 meta_fields = cls._meta.get_fields() # 全部取得してしまうので、必要なものだけにフィルタリング # related_nameを指定しているmodels.ForeignKeyがあると、 # models.ManyToOneRelのフィールドが作成されるので除外する filtered_fields = filter( lambda x: not isinstance(x, models.ManyToOneRel), meta_fields ) # フィルタリングしたフィールドからフィールド名に変換 meta_field_names = map(lambda x: x.name, filtered_fields) return list(meta_field_names)
他にも除外したいフィールドがあれば、filterを書けて除外できる。
また、cls._meta.get_fields()
は、Field
クラスなので、
verbose_field_names = map(lambda x: x.verbose_name, filtered_fields)
とすれば、verbose_name
も取得できる。
AdminSiteとかは、これを使っているらしい。
以上!!