Как проверить тип many-to-many-field в django?

Как можно проверить тип many-to-many-field в django?

Я хотел сделать это этот путь:

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

Это не работает, потому что класс ManyRelatedManager не может быть найден. Но если я делаю field.__class__ вывод django.db.models.fields.related.ManyRelatedManager

Почему это относится к классу, который, кажется, не существует и как я могу принести его для работы?

Большое спасибо за Вашу справку.

7
задан amann 4 May 2016 в 00:54
поделиться

3 ответа

Если у вас уже есть экземпляр поля, вы можете просто сделать:

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

5
ответ дан 6 December 2019 в 08:42
поделиться

Вы сможете проверить это как строку.

field.__class__.__name__ == 'ManyRelatedManager'
15
ответ дан 6 December 2019 в 08:42
поделиться

Я не совсем понимаю, чего вы пытаетесь достичь, но, полагаю, вам лучше посмотреть на атрибут _meta вашей модели для определения класса поля! проверьте _meta.fields и _meta.many_to_many!

Вы можете сделать что-то вроде:

field_class = [f for f in yourmodel._meta.many_to_many if f.name=='yourfield'][0].__class__
0
ответ дан 6 December 2019 в 08:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: