Как можно проверить тип many-to-many-field в django?
Я хотел сделать это этот путь:
import django
field.__class__ == django.db.models.fields.related.ManyRelatedManager
Это не работает, потому что класс ManyRelatedManager
не может быть найден. Но если я делаю field.__class__
вывод django.db.models.fields.related.ManyRelatedManager
Почему это относится к классу, который, кажется, не существует и как я могу принести его для работы?
Большое спасибо за Вашу справку.
Если у вас уже есть экземпляр поля, вы можете просто сделать:
if isinstance(field, ManyToManyField):
pass // stuff
Если у вас есть только связанный экземпляр менеджера, вы можете выполнить обратный поиск экземпляра поля:
>>> 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)
Это только проверено на Django 1.5
Вы сможете проверить это как строку.
field.__class__.__name__ == 'ManyRelatedManager'
Я не совсем понимаю, чего вы пытаетесь достичь, но, полагаю, вам лучше посмотреть на атрибут _meta
вашей модели для определения класса поля!
проверьте _meta.fields
и _meta.many_to_many
!
Вы можете сделать что-то вроде:
field_class = [f for f in yourmodel._meta.many_to_many if f.name=='yourfield'][0].__class__