amann amann - 7 months ago 83
Python Question

How to check the type of a many-to-many-field in django?

How can you check the type of a many-to-many-field in django?

I wanted to do it this way:

import django
field.__class__ == django.db.models.fields.related.ManyRelatedManager


This doesn't work, because the class
ManyRelatedManager
can't be found.
But if i do
field.__class__
the output is
django.db.models.fields.related.ManyRelatedManager


Why does it refer to a class that doesn't seem to exist and how can i bring it to work?

Many thanks for your help.

Answer

If you already have the field instance you can simply do:

if isinstance(field, ManyToManyField):
    pass // stuff

If you only have the related manager instance, you can reverse lookup the field instance:

>>> print fm
<class 'django.db.models.fields.related.ManyRelatedManager'>
>>> print fm.instance._meta.get_field_by_name('fieldnamehere')
(<django.db.models.fields.related.ForeignKey: fieldnamehere>, None, True, False)

This has only been tested on Django 1.5