modelオブジェクトからfield名と型を取得する - ManyToMany編

model作成

models.py

from django.db import model
from django.contrib.auth.models import User

class Post(models.Model):
    title = models.CharField(max_length = 50)
    author = models.ForeignKey(User)
    content = models.TextField()
    date = models.DateTimeField()
    tags = models.ManyToManyField(Tag, blank = True, null = True)

    def __unicode__(self):
        return self.title

※Tagモデルは省略しています。

field名と型取得

ManyToManyFieldのfield名と型を取得するには、
CharFieldなどの取得の仕方とは少し違います。

>>>from appname.models import *
>>>len(Post._meta.many_to_many)
   1
>>>Post._meta.many_to_many[0].name
   'tags'
>>>Post._meta.many_to_many[0].get_internal_type()
   'ManyToManyField'
>>>Post._meta.many_to_many[0].__dict__
   {'_choices': [],
    '_unique': False,
    'attname': 'tags',
    'auto_created': False,
    'blank': True,
    'column': 'tags',
    'creates_table': True,
    'creation_counter': 63,
    'db_column': None,
    'db_index': False,
    'db_table': None,
    'db_tablespace': '',
    'default': <class django.db.models.fields.NOT_PROVIDED at 0x00FD0810>,
    'editable': True,
    'help_text': <django.utils.functional.__proxy__ object at 0x011159B0>,
    'm2m_column_name': <function _curried at 0x0111B2B0>,
    'm2m_db_table': <function _curried at 0x0111B330>,
    'm2m_reverse_name': <function _curried at 0x0111B2F0>,
    'max_length': None,
    'name': 'tags',
    'null': True,
    'primary_key': False,
    'rel': <django.db.models.fields.related.ManyToManyRel object at 0x01115950>,
    'related': <RelatedObject: blog:post related to tags>,
    'related_query_name': <function _curried at 0x0111B270>,
    'serialize': True,
    'unique_for_date': None,
    'unique_for_month': None,
    'unique_for_year': None,
    'verbose_name': 'tags'}
twitter 2009-07-19 22:10:40.142838

関連ページ

Recent Updates

URLConf Tip 01 - キャプチャの有無にかかわらず同一のviewで処理する
Markdownの入力補助"wmd"をAdmin siteで使う
ModelFormでfieldのwidgetを変更する
動的なformを作る 6 - Dynamic Inline Admin site編
Formsetsを使う3 - inlineformset_factory編
動的なformを作る 5 - django-dynamic-formset編
Formクラスからメディアを定義する
複数のmodelを結合する 2 - Proxy model編
複数のmodelを結合する 1
ModelFormでfieldの表示順番を変える
Admin siteのwidgetを個別に変更する
formfield_overridesを使ってAdmin siteのwidgetを変更する
Admin siteのlist_displayをカスタマイズする - リンク編
Admin siteのlist_displayをカスタマイズする - 基本編
Admin siteのTextareaの高さを自在に変更する - admin.py編