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'}