1. ホーム
  2. python

[解決済み] TypeErrorです。ManyRelatedManagerオブジェクトはイテラブルではありません。

2022-01-30 02:39:56

質問

Many Related Manager is not iterable というエラーが発生し、解決することができません。以下のようなA、Bというモデルを持っています。

class B(models.Model):
     indicator = models.CharField(max_length=255, null=True)
     tags = models.CharField(max_length=255, null=True, blank=True)


class A(models.Model):
     definitions = models.ManyToManyField(B)
     user = models.ForeignKey('userauth.ABCUSER', null=True, blank=True)
     project = models.ForeignKey('userauth.ProjectList', null=True, blank=True)

クラスBの属性を含むモデルAの定義属性を取得したいのですが、以下のように取得しようとすると、エラーが発生します。

TypeError: ManyRelatedManagerオブジェクトは反復可能ではありません。

 if tbl_scope == 'Generic':
        checked_objects = A.objects.get(user=user, project=project)


 for checked_object in checked_objects.definitions:
        print(checked_object.indicator)

解決方法は?

m2mフィールドは、関連マネージャーオブジェクトとして返されるため、反復可能ではありません。allを使用してクエリセットに変換し、イテレート可能にする必要があります。

if tbl_scope == 'Generic':
        checked_objects = A.objects.get(user=user, project=project)


 for checked_object in checked_objects.definitions.all():
        print(checked_object.indicator)

について詳しく説明しています。 m2m フィールドを使用します。