10

djangoで多対多フィールドのタイプを確認するにはどうすればよいですか?

私はこのようにしたかった:

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

ManyRelatedManagerクラスが見つからないため、これは機能しません。しかし、私が行うfield.__class__と、出力はdjango.db.models.fields.related.ManyRelatedManager

存在しないと思われるクラスを参照しているのはなぜですか?どうすれば動作させることができますか?

助けてくれて本当にありがとうございます。

4

4 に答える 4

18

文字列として確認できるはずです。

field.__class__.__name__ == 'ManyRelatedManager'
于 2010-05-17T13:18:04.177 に答える
6

フィールドインスタンスがすでにある場合は、次のように簡単に実行できます。

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 でのみテストされています

于 2010-05-17T13:45:27.977 に答える
0

_metaあなたが達成しようとしていることはよくわかりませんが、フィールドクラスを決定するためにモデルの属性を調べたほうがよいと思います! チェックアウトし_meta.fields_meta.many_to_many

次のようなことができます:

field_class = [f for f in yourmodel._meta.many_to_many if f.name=='yourfield'][0].__class__
于 2010-05-17T13:20:13.800 に答える